bool CMsnProto::MSN_StoreCreateRelationships(bool allowRecurse) { char* reqHdr; ezxml_t tbdy; ezxml_t xmlp = storeSoapHdr("CreateRelationships", "RoamingIdentityChanged", tbdy, reqHdr); ezxml_t rels = ezxml_add_child(tbdy, "relationships", 0); ezxml_t rel = ezxml_add_child(rels, "Relationship", 0); ezxml_t node = ezxml_add_child(rel, "SourceID", 0); ezxml_set_txt(node, expresid); node = ezxml_add_child(rel, "SourceType", 0); ezxml_set_txt(node, "SubProfile"); node = ezxml_add_child(rel, "TargetID", 0); ezxml_set_txt(node, photoid); node = ezxml_add_child(rel, "TargetType", 0); ezxml_set_txt(node, "Photo"); node = ezxml_add_child(rel, "RelationshipName", 0); ezxml_set_txt(node, "ProfilePhoto"); char* szData = ezxml_toxml(xmlp, true); ezxml_free(xmlp); unsigned status = 0; char *storeUrl = NULL, *tResult = NULL; for (int k = 4; --k;) { mir_free(storeUrl); storeUrl = GetStoreHost("CreateRelationships"); tResult = getSslResult(&storeUrl, szData, reqHdr, status); if (tResult == NULL) UpdateStoreHost("CreateRelationships", NULL); else break; } mir_free(reqHdr); free(szData); if (tResult != NULL) { UpdateStoreHost("CreateRelationships", storeUrl); if (status == 500) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); const char* szErr = ezxml_txt(getSoapFault(xmlm, true)); if (strcmp(szErr, "PassportAuthFail") == 0 && allowRecurse) { MSN_GetPassportAuth(); status = MSN_StoreCreateRelationships(false) ? 200 : 500; } ezxml_free(xmlm); } } mir_free(tResult); mir_free(storeUrl); return status == 200; }
void CMsnProto::getMetaData(void) { char* getReqHdr; ezxml_t reqbdy; ezxml_t xmlreq = oimRecvHdr("GetMetadata", reqbdy, getReqHdr); char* szData = ezxml_toxml(xmlreq, true); ezxml_free(xmlreq); unsigned status; char* url = (char*)mir_strdup(oimRecvUrl); char* tResult = getSslResult(&url, szData, getReqHdr, status); mir_free(url); free(szData); mir_free(getReqHdr); if (tResult != NULL && status == 200) { ezxml_t xmlm = ezxml_parse_str(tResult, mir_strlen(tResult)); ezxml_t xmli = ezxml_get(xmlm, "s:Body", 0, "GetMetadataResponse", 0, "MD", -1); if (!xmli) xmli = ezxml_get(xmlm, "soap:Body", 0, "GetMetadataResponse", 0, "MD", -1); getOIMs(xmli); ezxml_free(xmlm); } mir_free(tResult); }
bool CMsnProto::MSN_StoreCreateProfile(bool allowRecurse) { char* reqHdr; ezxml_t tbdy; ezxml_t xmlp = storeSoapHdr("CreateProfile", "RoamingSeed", tbdy, reqHdr); ezxml_t pro = ezxml_add_child(tbdy, "profile", 0); ezxml_t node; pro = ezxml_add_child(pro, "ExpressionProfile", 0); ezxml_add_child(pro, "PersonalStatus", 0); node = ezxml_add_child(pro, "RoleDefinitionName", 0); ezxml_set_txt(node, "ExpressionProfileDefault"); char* szData = ezxml_toxml(xmlp, true); ezxml_free(xmlp); unsigned status = 0; char *storeUrl, *tResult = NULL; storeUrl = mir_strdup("https://storage.msn.com/storageservice/SchematizedStore.asmx"); tResult = getSslResult(&storeUrl, szData, reqHdr, status); mir_free(reqHdr); free(szData); if (tResult != NULL) { if (status == 200) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); UpdateStoreCacheKey(xmlm); ezxml_t body = getSoapResponse(xmlm, "CreateProfile"); MSN_StoreShareItem(ezxml_txt(body)); MSN_SharingMyProfile(); ezxml_free(xmlm); } else if (status == 500) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); const char* szErr = ezxml_txt(getSoapFault(xmlm, true)); if (strcmp(szErr, "PassportAuthFail") == 0 && allowRecurse) { MSN_GetPassportAuth(); status = MSN_StoreCreateProfile(false) ? 200 : 500; } ezxml_free(xmlm); } } mir_free(tResult); mir_free(storeUrl); return status == 200; }
bool CMsnProto::MSN_StoreShareItem(const char* id, bool allowRecurse) { char* reqHdr; ezxml_t tbdy; ezxml_t xmlp = storeSoapHdr("ShareItem", "RoamingSeed", tbdy, reqHdr); ezxml_t node = ezxml_add_child(tbdy, "resourceID", 0); ezxml_set_txt(node, id); node = ezxml_add_child(tbdy, "displayName", 0); ezxml_set_txt(node, "Messenger Roaming Identity"); char* szData = ezxml_toxml(xmlp, true); ezxml_free(xmlp); unsigned status = 0; char *storeUrl, *tResult = NULL; storeUrl = mir_strdup("https://storage.msn.com/storageservice/SchematizedStore.asmx"); tResult = getSslResult(&storeUrl, szData, reqHdr, status); mir_free(reqHdr); free(szData); if (tResult != NULL && status == 500) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); const char* szErr = ezxml_txt(getSoapFault(xmlm, true)); if (strcmp(szErr, "PassportAuthFail") == 0 && allowRecurse) { MSN_GetPassportAuth(); status = MSN_StoreCreateProfile(false) ? 200 : 500; } ezxml_free(xmlm); } mir_free(tResult); mir_free(storeUrl); return status == 200; }
bool CMsnProto::MSN_StoreFindDocuments(bool allowRecurse) { char* reqHdr; ezxml_t tbdy; ezxml_t xmlp = storeSoapHdr("FindDocuments", "RoamingIdentityChanged", tbdy, reqHdr); ezxml_t srch = ezxml_add_child(tbdy, "objectHandle", 0); ezxml_t node = ezxml_add_child(srch, "RelationshipName", 0); ezxml_set_txt(node, "/UserTiles"); ezxml_t alias = ezxml_add_child(srch, "Alias", 0); node = ezxml_add_child(alias, "Name", 0); ezxml_set_txt(node, mycid); node = ezxml_add_child(alias, "NameSpace", 0); ezxml_set_txt(node, "MyCidStuff"); ezxml_t doc = ezxml_add_child(tbdy, "documentAttributes", 0); node = ezxml_add_child(doc, "ResourceID", 0); ezxml_set_txt(node, "true"); node = ezxml_add_child(doc, "Name", 0); ezxml_set_txt(node, "true"); doc = ezxml_add_child(tbdy, "documentFilter", 0); node = ezxml_add_child(doc, "FilterAttributes", 0); ezxml_set_txt(node, "None"); doc = ezxml_add_child(tbdy, "documentSort", 0); node = ezxml_add_child(doc, "SortBy", 0); ezxml_set_txt(node, "DateModified"); doc = ezxml_add_child(tbdy, "findContext", 0); node = ezxml_add_child(doc, "FindMethod", 0); ezxml_set_txt(node, "Default"); node = ezxml_add_child(doc, "ChunkSize", 0); ezxml_set_txt(node, "25"); char* szData = ezxml_toxml(xmlp, true); ezxml_free(xmlp); unsigned status = 0; char *storeUrl = NULL, *tResult = NULL; for (int k = 4; --k;) { mir_free(storeUrl); storeUrl = GetStoreHost("FindDocuments"); tResult = getSslResult(&storeUrl, szData, reqHdr, status); if (tResult == NULL) UpdateStoreHost("FindDocuments", NULL); else break; } mir_free(reqHdr); free(szData); if (tResult != NULL) { UpdateStoreHost("FindDocuments", storeUrl); if (status == 500) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); const char* szErr = ezxml_txt(getSoapFault(xmlm, true)); if (strcmp(szErr, "PassportAuthFail") == 0 && allowRecurse) { MSN_GetPassportAuth(); status = MSN_StoreFindDocuments(false) ? 200 : 500; } ezxml_free(xmlm); } } mir_free(tResult); mir_free(storeUrl); return status == 200; }
bool CMsnProto::MSN_StoreUpdateDocument(const TCHAR *sztName, const char *szMimeType, const char *szPicData, bool allowRecurse) { char* reqHdr; char* szName = mir_utf8encodeT(sztName); ezxml_t tbdy; ezxml_t xmlp = storeSoapHdr("UpdateDocument", "RoamingIdentityChanged", tbdy, reqHdr); ezxml_t doc = ezxml_add_child(tbdy, "document", 0); ezxml_set_attr(doc, "xsi:type", "Photo"); ezxml_t node = ezxml_add_child(doc, "ResourceID", 0); ezxml_set_txt(node, photoid); node = ezxml_add_child(doc, "Name", 0); ezxml_set_txt(node, szName); doc = ezxml_add_child(doc, "DocumentStreams", 0); doc = ezxml_add_child(doc, "DocumentStream", 0); ezxml_set_attr(doc, "xsi:type", "PhotoStream"); node = ezxml_add_child(doc, "MimeType", 0); ezxml_set_txt(node, szMimeType); node = ezxml_add_child(doc, "Data", 0); ezxml_set_txt(node, szPicData); node = ezxml_add_child(doc, "DataSize", 0); ezxml_set_txt(node, "0"); node = ezxml_add_child(doc, "DocumentStreamType", 0); ezxml_set_txt(node, "UserTileStatic"); char* szData = ezxml_toxml(xmlp, true); ezxml_free(xmlp); mir_free(szName); unsigned status = 0; char *storeUrl = NULL, *tResult = NULL; for (int k = 4; --k;) { mir_free(storeUrl); storeUrl = GetStoreHost("UpdateDocument"); tResult = getSslResult(&storeUrl, szData, reqHdr, status); if (tResult == NULL) UpdateStoreHost("UpdateDocument", NULL); else break; } mir_free(reqHdr); free(szData); if (tResult != NULL) { UpdateStoreHost("UpdateDocument", storeUrl); if (status == 500 && allowRecurse) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); const char* szErr = ezxml_txt(getSoapFault(xmlm, true)); if (strcmp(szErr, "PassportAuthFail") == 0) { MSN_GetPassportAuth(); status = MSN_StoreUpdateDocument(sztName, szMimeType, szPicData, false) ? 200 : 500; } else if (szErr[0]) { MSN_StoreDeleteRelationships(true); MSN_StoreDeleteRelationships(false); MSN_StoreCreateDocument(sztName, szMimeType, szPicData); MSN_StoreCreateRelationships(); } ezxml_free(xmlm); } } mir_free(tResult); mir_free(storeUrl); return status == 200; }
bool CMsnProto::MSN_StoreCreateDocument(const TCHAR *sztName, const char *szMimeType, const char *szPicData, bool allowRecurse) { char* reqHdr; ezxml_t tbdy; char* szName = mir_utf8encodeT(sztName); ezxml_t xmlp = storeSoapHdr("CreateDocument", "RoamingIdentityChanged", tbdy, reqHdr); ezxml_t hndl = ezxml_add_child(tbdy, "parentHandle", 0); ezxml_t node = ezxml_add_child(hndl, "RelationshipName", 0); ezxml_set_txt(node, "/UserTiles"); ezxml_t alias = ezxml_add_child(hndl, "Alias", 0); node = ezxml_add_child(alias, "Name", 0); ezxml_set_txt(node, mycid); node = ezxml_add_child(alias, "NameSpace", 0); ezxml_set_txt(node, "MyCidStuff"); ezxml_t doc = ezxml_add_child(tbdy, "document", 0); ezxml_set_attr(doc, "xsi:type", "Photo"); node = ezxml_add_child(doc, "Name", 0); ezxml_set_txt(node, szName); doc = ezxml_add_child(doc, "DocumentStreams", 0); doc = ezxml_add_child(doc, "DocumentStream", 0); ezxml_set_attr(doc, "xsi:type", "PhotoStream"); node = ezxml_add_child(doc, "DocumentStreamType", 0); ezxml_set_txt(node, "UserTileStatic"); node = ezxml_add_child(doc, "MimeType", 0); ezxml_set_txt(node, szMimeType); node = ezxml_add_child(doc, "Data", 0); ezxml_set_txt(node, szPicData); node = ezxml_add_child(doc, "DataSize", 0); ezxml_set_txt(node, "0"); node = ezxml_add_child(tbdy, "relationshipName", 0); ezxml_set_txt(node, "Messenger User Tile"); char* szData = ezxml_toxml(xmlp, true); ezxml_free(xmlp); mir_free(szName); unsigned status = 0; char *storeUrl = NULL, *tResult = NULL; for (int k = 4; --k;) { mir_free(storeUrl); storeUrl = GetStoreHost("CreateDocument"); tResult = getSslResult(&storeUrl, szData, reqHdr, status); if (tResult == NULL) UpdateStoreHost("CreateDocument", NULL); else break; } mir_free(reqHdr); free(szData); if (tResult != NULL) { UpdateStoreHost("CreateDocument", storeUrl); if (status == 200) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); ezxml_t bdy = getSoapResponse(xmlm, "CreateDocument"); mir_snprintf(photoid, sizeof(photoid), "%s", ezxml_txt(bdy)); ezxml_free(xmlm); } else if (status == 500) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); const char* szErr = ezxml_txt(getSoapFault(xmlm, true)); if (strcmp(szErr, "PassportAuthFail") == 0 && allowRecurse) { MSN_GetPassportAuth(); status = MSN_StoreCreateDocument(sztName, szMimeType, szPicData, false) ? 200 : 500; } ezxml_free(xmlm); } } mir_free(tResult); mir_free(storeUrl); return status == 200; }
bool CMsnProto::MSN_StoreDeleteRelationships(bool tile, bool allowRecurse) { char* reqHdr; ezxml_t tbdy; ezxml_t xmlp = storeSoapHdr("DeleteRelationships", "RoamingIdentityChanged", tbdy, reqHdr); ezxml_t srch = ezxml_add_child(tbdy, "sourceHandle", 0); ezxml_t node; if (tile) { node = ezxml_add_child(srch, "RelationshipName", 0); ezxml_set_txt(node, "/UserTiles"); ezxml_t alias = ezxml_add_child(srch, "Alias", 0); node = ezxml_add_child(alias, "Name", 0); ezxml_set_txt(node, mycid); node = ezxml_add_child(alias, "NameSpace", 0); ezxml_set_txt(node, "MyCidStuff"); } else { node = ezxml_add_child(srch, "ResourceID", 0); ezxml_set_txt(node, expresid); } node = ezxml_add_child(tbdy, "targetHandles", 0); node = ezxml_add_child(node, "ObjectHandle", 0); node = ezxml_add_child(node, "ResourceID", 0); ezxml_set_txt(node, photoid); char* szData = ezxml_toxml(xmlp, true); ezxml_free(xmlp); unsigned status = 0; char *storeUrl = NULL, *tResult = NULL; for (int k = 4; --k;) { mir_free(storeUrl); storeUrl = GetStoreHost("DeleteRelationships"); tResult = getSslResult(&storeUrl, szData, reqHdr, status); if (tResult == NULL) UpdateStoreHost("DeleteRelationships", NULL); else break; } mir_free(reqHdr); free(szData); if (tResult != NULL) { UpdateStoreHost("DeleteRelationships", storeUrl); if (status == 500) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); const char* szErr = ezxml_txt(getSoapFault(xmlm, true)); if (strcmp(szErr, "PassportAuthFail") == 0 && allowRecurse) { MSN_GetPassportAuth(); status = MSN_StoreDeleteRelationships(tile, false) ? 200 : 500; } ezxml_free(xmlm); } } mir_free(tResult); mir_free(storeUrl); return status == 200; }
bool CMsnProto::MSN_StoreUpdateProfile(const char* szNick, const char* szStatus, bool lock, bool allowRecurse) { char* reqHdr; ezxml_t tbdy; ezxml_t xmlp = storeSoapHdr("UpdateProfile", "RoamingIdentityChanged", tbdy, reqHdr); ezxml_t pro = ezxml_add_child(tbdy, "profile", 0); ezxml_t node = ezxml_add_child(pro, "ResourceID", 0); ezxml_set_txt(node, proresid); ezxml_t expro = ezxml_add_child(pro, "ExpressionProfile", 0); node = ezxml_add_child(expro, "FreeText", 0); ezxml_set_txt(node, "Update"); if (szNick) { node = ezxml_add_child(expro, "DisplayName", 0); ezxml_set_txt(node, szNick); } if (szStatus) { node = ezxml_add_child(expro, "PersonalStatus", 0); ezxml_set_txt(node, szStatus); } node = ezxml_add_child(expro, "Flags", 0); ezxml_set_txt(node, lock ? "1" : "0"); char* szData = ezxml_toxml(xmlp, true); ezxml_free(xmlp); unsigned status = 0; char *storeUrl = NULL, *tResult = NULL; for (int k = 4; --k;) { mir_free(storeUrl); storeUrl = GetStoreHost("UpdateProfile"); tResult = getSslResult(&storeUrl, szData, reqHdr, status); if (tResult == NULL) UpdateStoreHost("UpdateProfile", NULL); else break; } mir_free(reqHdr); free(szData); if (tResult != NULL) { UpdateStoreHost("UpdateProfile", storeUrl); if (status == 200) { replaceStr(msnLastStatusMsg, szStatus); MSN_ABUpdateDynamicItem(); } else if (status == 500 && allowRecurse) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); const char* szErr = ezxml_txt(getSoapFault(xmlm, true)); if (strcmp(szErr, "PassportAuthFail") == 0) { MSN_GetPassportAuth(); status = MSN_StoreUpdateProfile(szNick, szStatus, lock, false) ? 200 : 500; } ezxml_free(xmlm); } } mir_free(tResult); mir_free(storeUrl); return status == 200; }
bool CMsnProto::MSN_StoreGetProfile(bool allowRecurse) { char* reqHdr; ezxml_t tbdy; ezxml_t xmlp = storeSoapHdr("GetProfile", "Initial", tbdy, reqHdr); ezxml_t prohndl = ezxml_add_child(tbdy, "profileHandle", 0); ezxml_t alias = ezxml_add_child(prohndl, "Alias", 0); ezxml_t node = ezxml_add_child(alias, "Name", 0); ezxml_set_txt(node, mycid); node = ezxml_add_child(alias, "NameSpace", 0); ezxml_set_txt(node, "MyCidStuff"); node = ezxml_add_child(prohndl, "RelationshipName", 0); ezxml_set_txt(node, "MyProfile"); ezxml_t proattr = ezxml_add_child(tbdy, "profileAttributes", 0); node = ezxml_add_child(proattr, "ResourceID", 0); ezxml_set_txt(node, "true"); node = ezxml_add_child(proattr, "DateModified", 0); ezxml_set_txt(node, "true"); ezxml_t exproattr = ezxml_add_child(proattr, "ExpressionProfileAttributes", 0); node = ezxml_add_child(exproattr, "ResourceID", 0); ezxml_set_txt(node, "true"); node = ezxml_add_child(exproattr, "DateModified", 0); ezxml_set_txt(node, "true"); node = ezxml_add_child(exproattr, "DisplayName", 0); ezxml_set_txt(node, "true"); node = ezxml_add_child(exproattr, "DisplayNameLastModified", 0); ezxml_set_txt(node, "true"); node = ezxml_add_child(exproattr, "PersonalStatus", 0); ezxml_set_txt(node, "true"); node = ezxml_add_child(exproattr, "PersonalStatusLastModified", 0); ezxml_set_txt(node, "true"); node = ezxml_add_child(exproattr, "StaticUserTilePublicURL", 0); ezxml_set_txt(node, "true"); node = ezxml_add_child(exproattr, "Photo", 0); ezxml_set_txt(node, "true"); node = ezxml_add_child(exproattr, "Flags", 0); ezxml_set_txt(node, "true"); char* szData = ezxml_toxml(xmlp, true); ezxml_free(xmlp); unsigned status = 0; char *storeUrl = NULL, *tResult = NULL; for (int k = 4; --k;) { mir_free(storeUrl); storeUrl = GetStoreHost("GetProfile"); tResult = getSslResult(&storeUrl, szData, reqHdr, status); if (tResult == NULL) UpdateStoreHost("GetProfile", NULL); else break; } mir_free(reqHdr); free(szData); if (tResult != NULL) { if (status == 200) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); ezxml_t body = getSoapResponse(xmlm, "GetProfile"); UpdateStoreHost("GetProfile", body ? storeUrl : NULL); mir_snprintf(proresid, sizeof(proresid), "%s", ezxml_txt(ezxml_child(body, "ResourceID"))); ezxml_t expr = ezxml_child(body, "ExpressionProfile"); if (expr == NULL) { MSN_StoreShareItem(proresid); MSN_SharingMyProfile(); if (allowRecurse) MSN_StoreGetProfile(false); } else { const char* szNick = ezxml_txt(ezxml_child(expr, "DisplayName")); setStringUtf(NULL, "Nick", (char*)szNick); const char* szStatus = ezxml_txt(ezxml_child(expr, "PersonalStatus")); replaceStr(msnLastStatusMsg, szStatus); mir_snprintf(expresid, sizeof(expresid), "%s", ezxml_txt(ezxml_child(expr, "ResourceID"))); ezxml_t photo = ezxml_child(expr, "Photo"); mir_snprintf(photoid, sizeof(photoid), "%s", ezxml_txt(ezxml_child(photo, "ResourceID"))); ezxml_t docstr = ezxml_get(photo, "DocumentStreams", 0, "DocumentStream", -1); while (docstr) { const char *docname = ezxml_txt(ezxml_child(docstr, "DocumentStreamName")); if (!strcmp(docname, "UserTileStatic")) { getMyAvatarFile(ezxml_txt(ezxml_child(docstr, "PreAuthURL")), _T("miranda_avatar.tmp")); break; } docstr = ezxml_next(docstr); } } ezxml_free(xmlm); } else if (status == 500 && allowRecurse) { ezxml_t xmlm = ezxml_parse_str(tResult, strlen(tResult)); const char* szErr = ezxml_txt(getSoapFault(xmlm, true)); if (strcmp(szErr, "PassportAuthFail") == 0) { MSN_GetPassportAuth(); MSN_StoreGetProfile(false); } else { MSN_StoreCreateProfile(); if (MSN_StoreGetProfile(false)) status = 200; } ezxml_free(xmlm); } else UpdateStoreHost("GetProfile", NULL); } mir_free(tResult); mir_free(storeUrl); return status == 200; }
void CMsnProto::getOIMs(ezxml_t xmli) { ezxml_t toki = ezxml_child(xmli, "M"); if (toki == NULL) return; char* getReqHdr; ezxml_t reqmsg; ezxml_t xmlreq = oimRecvHdr("GetMessage", reqmsg, getReqHdr); ezxml_t reqmid = ezxml_add_child(reqmsg, "messageId", 0); ezxml_t reqmrk = ezxml_add_child(reqmsg, "alsoMarkAsRead", 0); ezxml_set_txt(reqmrk, "false"); char* delReqHdr; ezxml_t delmsg; ezxml_t xmldel = oimRecvHdr("DeleteMessages", delmsg, delReqHdr); ezxml_t delmids = ezxml_add_child(delmsg, "messageIds", 0); while (toki != NULL) { const char* szId = ezxml_txt(ezxml_child(toki, "I")); const char* szEmail = ezxml_txt(ezxml_child(toki, "E")); ezxml_set_txt(reqmid, szId); char* szData = ezxml_toxml(xmlreq, true); unsigned status; char* url = (char*)mir_strdup(oimRecvUrl); char* tResult = getSslResult(&url, szData, getReqHdr, status); free(szData); mir_free(url); if (tResult != NULL && status == 200) { ezxml_t xmlm = ezxml_parse_str(tResult, mir_strlen(tResult)); ezxml_t body = getSoapResponse(xmlm, "GetMessage"); MimeHeaders mailInfo; const char* mailbody = mailInfo.readFromBuffer((char*)ezxml_txt(body)); time_t evtm = time(NULL); const char* arrTime = mailInfo["X-OriginalArrivalTime"]; if (arrTime != NULL) { char szTime[32], *p; txtParseParam(arrTime, "FILETIME", "[", "]", szTime, sizeof(szTime)); unsigned filetimeLo = strtoul(szTime, &p, 16); if (*p == ':') { unsigned __int64 filetime = strtoul(p + 1, &p, 16); filetime <<= 32; filetime |= filetimeLo; filetime /= 10000000; #ifndef __GNUC__ filetime -= 11644473600ui64; #else filetime -= 11644473600ull; #endif evtm = (time_t)filetime; } } PROTORECVEVENT pre = { 0 }; pre.szMessage = mailInfo.decodeMailBody((char*)mailbody); pre.timestamp = evtm; ProtoChainRecvMsg(MSN_HContactFromEmail(szEmail), &pre); mir_free(pre.szMessage); ezxml_t delmid = ezxml_add_child(delmids, "messageId", 0); ezxml_set_txt(delmid, szId); ezxml_free(xmlm); } mir_free(tResult); toki = ezxml_next(toki); } ezxml_free(xmlreq); mir_free(getReqHdr); if (ezxml_child(delmids, "messageId") != NULL) { char* szData = ezxml_toxml(xmldel, true); unsigned status; char* url = (char*)mir_strdup(oimRecvUrl); char* tResult = getSslResult(&url, szData, delReqHdr, status); mir_free(url); mir_free(tResult); free(szData); } ezxml_free(xmldel); mir_free(delReqHdr); }