int parserLine(struct shell_state *state, const char *line) { char **argv = NULL; int argc = 0; struct function *fct = NULL; argc = getTokens(line, &argv); argc = replaceTokens(argc, &argv, state); if((fct = searchFunction(state->cmds, argv[0])) != NULL) { state->last_ret_value = fct->f(argc, argv); for(; argc > 0; argc--) free(argv[argc-1]); return 0; } else { printf("%s : unknown filename or command.\n", argv[0]); return -1; } return 0; }
void TlenUploadAvatar(TlenProtocol *proto, unsigned char *data, int dataLen, int access) { NETLIBHTTPHEADER *headers; unsigned char *buffer; if (proto->threadData != NULL && dataLen > 0 && data != NULL) { char *mpartHead = "--AaB03x\r\nContent-Disposition: form-data; name=\"filename\"; filename=\"plik.png\"\r\nContent-Type: image/png\r\n\r\n"; char *mpartTail = "\r\n--AaB03x--\r\n"; int size, sizeHead = (int)mir_strlen(mpartHead), sizeTail = (int)mir_strlen(mpartTail); char *request = replaceTokens(proto->threadData->tlenConfig.mailBase, proto->threadData->tlenConfig.avatarUpload, "", proto->threadData->avatarToken, 0, access); TLENUPLOADAVATARTHREADDATA *threadData = (TLENUPLOADAVATARTHREADDATA *)mir_alloc(sizeof(TLENUPLOADAVATARTHREADDATA)); threadData->proto = proto; NETLIBHTTPREQUEST *req = (NETLIBHTTPREQUEST *)mir_alloc(sizeof(NETLIBHTTPREQUEST)); headers = (NETLIBHTTPHEADER *)mir_alloc(sizeof(NETLIBHTTPHEADER)); memset(req, 0, sizeof(NETLIBHTTPREQUEST)); req->cbSize = sizeof(NETLIBHTTPREQUEST); req->requestType = proto->threadData->tlenConfig.avatarUploadMthd; req->szUrl = request; req->flags = 0; headers[0].szName = "Content-Type"; headers[0].szValue = "multipart/form-data; boundary=AaB03x"; req->headersCount = 1; req->headers = headers; size = dataLen + sizeHead + sizeTail; buffer = (unsigned char *)mir_alloc(size); memcpy(buffer, mpartHead, sizeHead); memcpy(buffer + sizeHead, data, dataLen); memcpy(buffer + sizeHead + dataLen, mpartTail, sizeTail); req->dataLength = size; req->pData = (char*)buffer; threadData->req = req; threadData->data = (char *) mir_alloc(dataLen); memcpy(threadData->data, data, dataLen); threadData->length = dataLen; forkthread(TlenUploadAvatarRequestThread, 0, threadData); } }
static int testCompareXMLToArgvFiles(const char *inxml, const char *outargv, dnsmasqCapsPtr caps) { char *inXmlData = NULL; char *outArgvData = NULL; char *actual = NULL; int ret = -1; virNetworkDefPtr dev = NULL; virNetworkObjPtr obj = NULL; virCommandPtr cmd = NULL; char *pidfile = NULL; dnsmasqContext *dctx = NULL; if (virtTestLoadFile(inxml, &inXmlData) < 0) goto fail; if (virtTestLoadFile(outargv, &outArgvData) < 0) goto fail; if (replaceTokens(&outArgvData, "@DNSMASQ@", DNSMASQ)) goto fail; if (!(dev = virNetworkDefParseString(inXmlData))) goto fail; if (VIR_ALLOC(obj) < 0) goto fail; obj->def = dev; dctx = dnsmasqContextNew(dev->name, "/var/lib/libvirt/dnsmasq"); if (dctx == NULL) goto fail; if (networkBuildDhcpDaemonCommandLine(obj, &cmd, pidfile, dctx, caps) < 0) goto fail; if (!(actual = virCommandToString(cmd))) goto fail; if (STRNEQ(outArgvData, actual)) { virtTestDifference(stderr, outArgvData, actual); goto fail; } ret = 0; fail: VIR_FREE(inXmlData); VIR_FREE(outArgvData); VIR_FREE(actual); VIR_FREE(pidfile); virCommandFree(cmd); virNetworkObjFree(obj); dnsmasqContextFree(dctx); return ret; }
void TlenRemoveAvatar() { NETLIBHTTPREQUEST *req; char *request; if (jabberThreadInfo != NULL) { req = (NETLIBHTTPREQUEST *)mir_alloc(sizeof(NETLIBHTTPREQUEST)); request = replaceTokens(jabberThreadInfo->tlenConfig.mailBase, jabberThreadInfo->tlenConfig.avatarRemove, "", jabberThreadInfo->avatarToken, 0, 0); ZeroMemory(req, sizeof(NETLIBHTTPREQUEST)); req->cbSize = sizeof(NETLIBHTTPREQUEST); req->requestType = jabberThreadInfo->tlenConfig.avatarGetMthd; req->szUrl = request; JabberForkThread(TlenRemoveAvatarRequestThread, 0, req); } }
void TlenRemoveAvatar(TlenProtocol *proto) { if (proto->threadData != NULL) { TLENREMOVEAVATARTHREADDATA *data = (TLENREMOVEAVATARTHREADDATA *)mir_alloc(sizeof(TLENREMOVEAVATARTHREADDATA)); NETLIBHTTPREQUEST *req = (NETLIBHTTPREQUEST *)mir_alloc(sizeof(NETLIBHTTPREQUEST)); data->proto =proto; data->req = req; char *request = replaceTokens(proto->threadData->tlenConfig.mailBase, proto->threadData->tlenConfig.avatarRemove, "", proto->threadData->avatarToken, 0, 0); memset(req, 0, sizeof(NETLIBHTTPREQUEST)); req->cbSize = sizeof(NETLIBHTTPREQUEST); req->requestType = proto->threadData->tlenConfig.avatarGetMthd; req->szUrl = request; forkthread(TlenRemoveAvatarRequestThread, 0, data); } }
void TlenUploadAvatar(unsigned char *data, int dataLen, int access) { NETLIBHTTPREQUEST *req; NETLIBHTTPHEADER *headers; TlenUploadAvatarThreadData *threadData; char *request; unsigned char *buffer; if (jabberThreadInfo != NULL && dataLen > 0 && data != NULL) { int size, sizeHead, sizeTail; request = replaceTokens(jabberThreadInfo->tlenConfig.mailBase, jabberThreadInfo->tlenConfig.avatarUpload, "", jabberThreadInfo->avatarToken, 0, access); threadData = (TlenUploadAvatarThreadData *)mir_alloc(sizeof(TlenUploadAvatarThreadData)); req = (NETLIBHTTPREQUEST *)mir_alloc(sizeof(NETLIBHTTPREQUEST)); headers = (NETLIBHTTPHEADER *)mir_alloc(sizeof(NETLIBHTTPHEADER)); ZeroMemory(req, sizeof(NETLIBHTTPREQUEST)); req->cbSize = sizeof(NETLIBHTTPREQUEST); req->requestType = jabberThreadInfo->tlenConfig.avatarUploadMthd; req->szUrl = request; req->flags = 0; headers[0].szName = "Content-Type"; headers[0].szValue = "multipart/form-data; boundary=AaB03x"; req->headersCount = 1; req->headers = headers; sizeHead = strlen("--AaB03x\r\nContent-Disposition: form-data; name=\"filename\"; filename=\"plik.png\"\r\nContent-Type: image/png\r\n\r\n"); sizeTail = strlen("\r\n--AaB03x--\r\n"); size = dataLen + sizeHead + sizeTail; buffer = mir_alloc(size); strcpy(buffer, "--AaB03x\r\nContent-Disposition: form-data; name=\"filename\"; filename=\"plik.png\"\r\nContent-Type: image/png\r\n\r\n"); memcpy(buffer + sizeHead, data, dataLen); strcpy(buffer + sizeHead + dataLen, "\r\n--AaB03x--\r\n"); req->dataLength = size; req->pData = buffer; threadData->request = req; threadData->data = (char *) mir_alloc(dataLen); memcpy(threadData->data, data, dataLen); threadData->length = dataLen; JabberForkThread(TlenUploadAvatarRequestThread, 0, threadData); } }
static void TlenGetAvatarThread(void *ptr) { TLEN_LIST_ITEM *item = NULL; NETLIBHTTPREQUEST req; NETLIBHTTPREQUEST *resp; TLENGETAVATARTHREADDATA *data = (TLENGETAVATARTHREADDATA *)ptr; HANDLE hContact = data->hContact; char *request; char *login = NULL; if (hContact != NULL) { char *jid = TlenJIDFromHContact(data->proto, hContact); login = TlenNickFromJID(jid); item = TlenListGetItemPtr(data->proto, LIST_ROSTER, jid); mir_free(jid); } else { login = mir_strdup(data->proto->threadData->username); } if ((data->proto->threadData != NULL && hContact == NULL) || item != NULL) { DWORD format = PA_FORMAT_UNKNOWN; if (item != NULL) { item->newAvatarDownloading = TRUE; } request = replaceTokens(data->proto->threadData->tlenConfig.mailBase, data->proto->threadData->tlenConfig.avatarGet, login, data->proto->threadData->avatarToken, 0, 0); ZeroMemory(&req, sizeof(req)); req.cbSize = sizeof(req); req.requestType = data->proto->threadData->tlenConfig.avatarGetMthd; req.flags = 0; req.headersCount = 0; req.headers = NULL; req.dataLength = 0; req.szUrl = request; resp = (NETLIBHTTPREQUEST *)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)data->proto->m_hNetlibUser, (LPARAM)&req); if (item != NULL) { item->newAvatarDownloading = FALSE; } if (resp != NULL) { if (resp->resultCode/100 == 2) { if (resp->dataLength > 0) { int i; for (i=0; i<resp->headersCount; i++ ) { if (!strcmpi(resp->headers[i].szName, "Content-Type")) { if (!strcmpi(resp->headers[i].szValue, "image/png")) format = PA_FORMAT_PNG; else if (!strcmpi(resp->headers[i].szValue, "image/x-png")) format = PA_FORMAT_PNG; else if (!strcmpi(resp->headers[i].szValue, "image/jpeg")) format = PA_FORMAT_JPEG; else if (!strcmpi(resp->headers[i].szValue, "image/jpg")) format = PA_FORMAT_JPEG; else if (!strcmpi(resp->headers[i].szValue, "image/gif")) format = PA_FORMAT_GIF; else if (!strcmpi(resp->headers[i].szValue, "image/bmp")) format = PA_FORMAT_BMP; break; } } SetAvatar(data->proto, hContact, item, resp->pData, resp->dataLength, format); } else { RemoveAvatar(data->proto, hContact); } } CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp); } mir_free(request); mir_free(login); } if (hContact == NULL) { getAvatarMutex = 0; } mir_free(data); }
inline std::string replaceTokens(const std::string &source, const std::map<std::string, T> &properties) { return replaceTokens(source, [&properties](const std::string &token) -> std::string { const auto it_prop = properties.find(token); return it_prop != properties.end() ? toString(it_prop->second) : ""; }); }