X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fcarddav%2Fcarddav.cpp;h=851b55c867a6b81ea2e21cb838721dc0d4ea02e0;hb=a217e7366f768d671fa325ebe8546d57ce9524e6;hp=5a07c417705ff024fc1d26cc1cd7a8dc201184ae;hpb=45729fca56479bd9158486e0cda0c4a94b4dd1dc;p=xestiaab%2F.git diff --git a/source/carddav/carddav.cpp b/source/carddav/carddav.cpp index 5a07c41..851b55c 100644 --- a/source/carddav/carddav.cpp +++ b/source/carddav/carddav.cpp @@ -13,7 +13,6 @@ size_t WritebackFunc(char *ptr, size_t size, size_t nmemb, wxString *stream){ wxString Data; - wxString *PageInput; Data = wxString::FromUTF8((char *)ptr); stream->Append(Data); @@ -75,6 +74,7 @@ wxString CardDAV::PageData; CURLcode CardDAV::claconncode; int CardDAV::HTTPErrorCode; wxString CardDAV::ErrorMessage; +SSLCertCollection CardDAV::VerifyCertCollection; CardDAV::CardDAV(){ ServerPort = 8080; @@ -225,6 +225,137 @@ void CardDAV::Abort(){ } +CURLcode CardDAV::SSLVerifyTest(){ + + PageData.Clear(); + PageHeader.Clear(); + + SSLStatus = TRUE; + AuthPassed = TRUE; + AbortConnection = FALSE; + + CURL *conn; + CURL *connssldata; + CURLcode conncode; + wxString ServerAddressURL; + wxString ServerAuth; + wxString ServerAddressSSL; + wxString ServerAddressNormal; + + conn = curl_easy_init(); + + /*struct CardDAVCURLPasser { + + CardDAV *Data; + bool HeaderMode = TRUE; + + } CardDAVHeader, CardDAVFooter; + + CardDAVHeader.Data = this; + CardDAVHeader.HeaderMode = TRUE; + + CardDAVFooter.Data = this; + CardDAVFooter.HeaderMode = FALSE;*/ + + wxString Data1; + wxString Data2; + + ServerAddressURL = ServerAddress + wxT(":") + wxString::Format(wxT("%i"), ServerPort) + wxT("/"); + ServerAddressSSL = wxT("https://") + ServerAddressURL; + + if (ServerSSL){ + + union { + struct curl_slist *certdata; + struct curl_certinfo *certinfo; + } ptr; + + ptr.certdata = NULL; + + // Setup two initial connections and attempt to get the certificate data. + + curl_easy_setopt(conn, CURLOPT_URL, (const char*)ServerAddressSSL.mb_str(wxConvUTF8)); + curl_easy_setopt(conn, CURLOPT_CERTINFO, 1); + curl_easy_setopt(conn, CURLOPT_VERBOSE, 1L); + //curl_easy_setopt(conn, CURLOPT_SSL_VERIFYPEER, FALSE); + //curl_easy_setopt(conn, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, curlerrbuffer); + curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, WritebackFunc); + curl_easy_setopt(conn, CURLOPT_WRITEDATA, &PageData); + curl_easy_setopt(conn, CURLOPT_WRITEHEADER, &PageHeader); + + conncode = (curl_easy_perform(conn)); + + // Check if the SSL certificate is valid or self-signed or some other + // error occured. + + if (conncode == CURLE_OK){ + + // Connection is OK. Do nothing. + + *ServerResult = TRUE; + + } else if (conncode == CURLE_SSL_CACERT || conncode == CURLE_SSL_CONNECT_ERROR){ + + connssldata = curl_easy_init(); + + // Retry but get the certificates without peer/host verification. + + curl_easy_setopt(connssldata, CURLOPT_URL, (const char*)ServerAddressSSL.mb_str(wxConvUTF8)); + curl_easy_setopt(connssldata, CURLOPT_CERTINFO, 1); + curl_easy_setopt(connssldata, CURLOPT_VERBOSE, 1L); + //curl_easy_setopt(conn, CURLOPT_SSL_VERIFYPEER, FALSE); + //curl_easy_setopt(conn, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_easy_setopt(connssldata, CURLOPT_ERRORBUFFER, curlerrbuffer); + curl_easy_setopt(connssldata, CURLOPT_WRITEFUNCTION, WritebackFunc); + curl_easy_setopt(connssldata, CURLOPT_WRITEDATA, &PageData); + curl_easy_setopt(connssldata, CURLOPT_WRITEHEADER, &PageHeader); + //curl_easy_setopt(connssldata, CURLOPT_SSL_VERIFYPEER, FALSE); + //curl_easy_setopt(connssldata, CURLOPT_SSL_VERIFYHOST, FALSE); + + CURLcode certfetchcode; + + certfetchcode = (curl_easy_perform(connssldata)); + + VerifyCertCollection = BuildSSLCollection(connssldata); + + if (certfetchcode == CURLE_OK){ + + curl_easy_getinfo(connssldata, CURLINFO_CERTINFO, &ptr.certdata); + + VerifyCertCollection = BuildSSLCollection(connssldata); + + } else { + + conncode = certfetchcode; + + } + + *ServerResult = FALSE; + + } else { + + fprintf(stderr, "curl_easy_perform() failed: %s\n", + curl_easy_strerror(conncode)); + + ErrorMessage = wxString::Format(wxT("%s"), curl_easy_strerror(conncode)); + + *ServerResult = FALSE; + + } + + } + + curl_easy_cleanup(conn); + + return conncode; + +} + +SSLCertCollection CardDAV::GetSSLVerifyResults(){ + return VerifyCertCollection; +} + bool CardDAV::Connect(){ PageData.Clear(); @@ -234,15 +365,15 @@ bool CardDAV::Connect(){ AuthPassed = TRUE; AbortConnection = FALSE; - CURL *conn; - CURLcode conncode; + CURL *conn; + CURLcode conncode; wxString ServerAddressURL; wxString ServerAuth; wxString ServerAddressSSL; wxString ServerAddressNormal; conn = curl_easy_init(); - + struct CardDAVCURLPasser { CardDAV *Data; @@ -285,6 +416,46 @@ bool CardDAV::Connect(){ if (ServerSSL){ + union { + struct curl_slist *certdata; + struct curl_certinfo *certinfo; + } ptr; + + ptr.certdata = NULL; + + // Setup two initial connections and attempt to get the certificate data. + + curl_easy_setopt(conn, CURLOPT_URL, (const char*)ServerAddressSSL.mb_str(wxConvUTF8)); + curl_easy_setopt(conn, CURLOPT_CERTINFO, 1); + + conncode = (curl_easy_perform(conn)); + + // Check if the SSL certificate is valid or self-signed or some other + // error occured. + + if (conncode == CURLE_OK){ + + // Connection is OK. Do nothing. + + } else if (conncode == CURLE_SSL_CACERT){ + + // Post message saying SSL certificate is invalid and + + + curl_easy_getinfo(conn, CURLINFO_CERTINFO, &ptr.certdata); + + } else { + + fprintf(stderr, "curl_easy_perform() failed: %s\n", + curl_easy_strerror(conncode)); + + ErrorMessage = wxString::Format(wxT("%s"), curl_easy_strerror(conncode)); + + *ServerResult = FALSE; + return FALSE; + + } + curl_easy_setopt(conn, CURLOPT_URL, (const char*)ServerAddressSSL.mb_str(wxConvUTF8)); curl_easy_setopt(conn, CURLOPT_NOPROGRESS, 1L); curl_easy_setopt(conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY); @@ -299,11 +470,6 @@ bool CardDAV::Connect(){ curl_easy_setopt(conn, CURLOPT_CERTINFO, 1); conncode = (curl_easy_perform(conn)); - - union { - struct curl_slist *certdata; - struct curl_certinfo *certinfo; - } ptr; ptr.certdata = NULL; @@ -311,6 +477,31 @@ bool CardDAV::Connect(){ if (conncode == CURLE_OK){ + // Process the server header response and look for + // 'addressbook' within the DAV header. + + wxStringTokenizer wxSHeaderLines(PageHeader, wxT("\r\n")); + wxString wxSHeaderLine; + std::map DAVHeaderLines; + + while (wxSHeaderLines.HasMoreTokens()){ + + wxSHeaderLine = wxSHeaderLines.GetNextToken(); + + if (wxSHeaderLine.Mid(0, 4) == wxT("DAV:")){ + + // Look for address book in the line. + + if (wxSHeaderLine.Find(wxT("addressbook")) != wxNOT_FOUND){ + + HasCalDAVSupport = TRUE; + + } + + } + + } + *ServerResult = TRUE; AuthPassed = TRUE; SSLStatus = TRUE; @@ -496,7 +687,7 @@ void CardDAV::ProcessDataThread(){ struct UploadDataStruc UploadData; - ActIter = ActivityListPtr->find(ItemIndex); + ActIter = ActivityListPtr->find((int)ItemIndex); // Update result flag. @@ -762,13 +953,13 @@ void CardDAV::ProcessDataThread(){ SSLCertCol = BuildSSLCollection(sslerrconn); SSLCertCol.SuccessCode = 1; - return; + return; } else if (claconncode == CURLE_HTTP_RETURNED_ERROR){ fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(claconncode)); - long http_code = 0; + int http_code = 0; curl_easy_getinfo(conn, CURLINFO_RESPONSE_CODE, &http_code); fprintf(stderr, "Error code was: %d\n", http_code); @@ -778,7 +969,7 @@ void CardDAV::ProcessDataThread(){ fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(claconncode)); - long http_code = 0; + int http_code = 0; curl_easy_getinfo(conn, CURLINFO_RESPONSE_CODE, &http_code); fprintf(stderr, "Error code was: %d\n", http_code); @@ -975,7 +1166,7 @@ void CardDAV::ProcessDataThread(){ // Catch all. - ActIter->second = 1; + //ActIter->second = 1; *ServerResult = TRUE; return; @@ -1062,7 +1253,7 @@ void CardDAV::GetServerContactData() struct UploadDataStruc UploadData; - ActIter = ActivityListPtr->find(ItemIndex); + ActIter = ActivityListPtr->find((int)ItemIndex); //ActIter->second = 1; @@ -1161,21 +1352,22 @@ void CardDAV::GetServerContactData() wxString ServerAddressOnly = wxT("https://") + ServerAddress + wxT(":") + wxString::Format(wxT("%i"), ServerPort) + wxT("/"); - curl_easy_setopt(conn, CURLOPT_URL, (const char*)ServerAddressSSL.mb_str(wxConvUTF8)); - curl_easy_setopt(conn, CURLOPT_NOPROGRESS, 1L); - curl_easy_setopt(conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY); - curl_easy_setopt(conn, CURLOPT_TIMEOUT, 60); - curl_easy_setopt(conn, CURLOPT_FAILONERROR, TRUE); - curl_easy_setopt(conn, CURLOPT_USERAGENT, XSDAB_USERAGENT); - curl_easy_setopt(conn, CURLOPT_USERPWD, (const char*)ServerAuth.mb_str(wxConvUTF8)); - curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, WritebackFunc); - curl_easy_setopt(conn, CURLOPT_WRITEDATA, &PageData); - curl_easy_setopt(conn, CURLOPT_WRITEHEADER, &PageHeader); - curl_easy_setopt(conn, CURLOPT_NOSIGNAL, 1); + curl_easy_setopt(sslerrconn, CURLOPT_URL, (const char*)ServerAddressOnly.mb_str(wxConvUTF8)); + curl_easy_setopt(sslerrconn, CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(sslerrconn, CURLOPT_HTTPAUTH, CURLAUTH_ANY); + curl_easy_setopt(sslerrconn, CURLOPT_TIMEOUT, 60); + curl_easy_setopt(sslerrconn, CURLOPT_FAILONERROR, TRUE); + curl_easy_setopt(sslerrconn, CURLOPT_USERAGENT, XSDAB_USERAGENT); + curl_easy_setopt(sslerrconn, CURLOPT_USERPWD, (const char*)ServerAuth.mb_str(wxConvUTF8)); + curl_easy_setopt(sslerrconn, CURLOPT_WRITEFUNCTION, WritebackFunc); + curl_easy_setopt(sslerrconn, CURLOPT_WRITEDATA, &PageData); + curl_easy_setopt(sslerrconn, CURLOPT_WRITEHEADER, &PageHeader); + curl_easy_setopt(sslerrconn, CURLOPT_NOSIGNAL, 1); //UploadData.readptr = &CardDAVDataQuery; //UploadData.sizeleft = CardDAVDataQuery.Len(); curl_easy_setopt(sslerrconn, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(sslerrconn, CURLOPT_SSL_VERIFYHOST, 0); curl_easy_setopt(sslerrconn, CURLOPT_CERTINFO, 1); wxString SSLLocalData; @@ -1198,9 +1390,6 @@ void CardDAV::GetServerContactData() // Load the recovery database for tasks not done. if (SSLLocalFile.IsOpened() == TRUE){ - - // Check if we are using wxWidgets version 2.8 or less and - // execute the required command accordingly. SSLLocalFile.ReadAll(&SSLLocalData, wxConvAuto()); @@ -1299,7 +1488,7 @@ void CardDAV::GetServerContactData() fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(claconncode)); - long http_code = 0; + int http_code = 0; curl_easy_getinfo(conn, CURLINFO_RESPONSE_CODE, &http_code); fprintf(stderr, "Error code was: %d\n", http_code); @@ -1309,7 +1498,7 @@ void CardDAV::GetServerContactData() fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(claconncode)); - long http_code = 0; + int http_code = 0; curl_easy_getinfo(conn, CURLINFO_RESPONSE_CODE, &http_code); fprintf(stderr, "Error code was: %d\n", http_code); @@ -1396,7 +1585,8 @@ void CardDAV::GetServerETagValueThread() SSLStatus = TRUE; AuthPassed = TRUE; AbortConnection = FALSE; - + + bool FilenameIsDirectory = FALSE; CURL *conn; CURLcode conncode; wxString ServerAddressURL; @@ -1428,6 +1618,14 @@ void CardDAV::GetServerETagValueThread() ServerAuth = ServerUser + wxT(":") + ServerPass; + // Workout if path is directory or filename. + + /*if (ServerAddress){ + FilenameIsDirectory = TRUE; + } else { + FilenameIsDirectory = FALSE; + }*/ + // Try SSL first. @@ -1452,7 +1650,7 @@ void CardDAV::GetServerETagValueThread() struct UploadDataStruc UploadData; - ActIter = ActivityListPtr->find(ItemIndex); + ActIter = ActivityListPtr->find((int)ItemIndex); static const char* query = "" @@ -1531,7 +1729,7 @@ void CardDAV::GetServerETagValueThread() curl_easy_setopt(conn, CURLOPT_CUSTOMREQUEST, "REPORT"); curl_easy_setopt(conn, CURLOPT_NOSIGNAL, 1); curl_easy_setopt(conn, CURLOPT_POSTFIELDS, query); - curl_easy_setopt(conn, CURLOPT_POSTFIELDSIZE, strlen(query)); + curl_easy_setopt(conn, CURLOPT_POSTFIELDSIZE, strlen(query)); claconncode = (curl_easy_perform(conn)); @@ -1564,6 +1762,9 @@ void CardDAV::GetServerETagValueThread() wxString ServerAddressOnly = wxT("https://") + ServerAddress + wxT(":") + wxString::Format(wxT("%i"), ServerPort) + wxT("/"); + PageData.clear(); + PageHeader.clear(); + curl_easy_setopt(sslerrconn, CURLOPT_URL, (const char*)ServerAddressOnly.mb_str(wxConvUTF8)); curl_easy_setopt(sslerrconn, CURLOPT_NOPROGRESS, 0); curl_easy_setopt(sslerrconn, CURLOPT_HTTPAUTH, CURLAUTH_ANY); @@ -1578,6 +1779,9 @@ void CardDAV::GetServerETagValueThread() curl_easy_setopt(sslerrconn, CURLOPT_NOSIGNAL, 1); curl_easy_setopt(sslerrconn, CURLOPT_SSL_VERIFYPEER, 0); curl_easy_setopt(sslerrconn, CURLOPT_CERTINFO, 1); + curl_easy_setopt(sslerrconn, CURLOPT_SSL_VERIFYPEER, 1); + curl_easy_setopt(sslerrconn, CURLOPT_SSL_VERIFYHOST, 2); + curl_easy_setopt(sslerrconn, CURLOPT_CAINFO, (const char*)ServerCertFilename.mb_str(wxConvUTF8)); wxString SSLLocalData; wxString SSLServerData; @@ -1595,7 +1799,7 @@ void CardDAV::GetServerETagValueThread() #else SSLLocalFile.Open(ServerCertFilename, wxT("r")); #endif - + // Load the recovery database for tasks not done. if (SSLLocalFile.IsOpened() == TRUE){ @@ -1636,7 +1840,9 @@ void CardDAV::GetServerETagValueThread() curl_easy_setopt(conn, CURLOPT_CUSTOMREQUEST, "REPORT"); curl_easy_setopt(conn, CURLOPT_NOSIGNAL, 1); curl_easy_setopt(conn, CURLOPT_POSTFIELDS, query); - curl_easy_setopt(conn, CURLOPT_POSTFIELDSIZE, strlen(query)); + curl_easy_setopt(conn, CURLOPT_POSTFIELDSIZE, strlen(query)); + curl_easy_setopt(conn, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(conn, CURLOPT_SSL_VERIFYHOST, 0); claconncode = (curl_easy_perform(conn)); @@ -1655,8 +1861,6 @@ void CardDAV::GetServerETagValueThread() } - - // Sort out SSL error. // When SSL cert error occurs, connect again and fetch certificates. @@ -1696,15 +1900,20 @@ void CardDAV::GetServerETagValueThread() SSLCertCol = BuildSSLCollection(sslerrconn); SSLCertCol.SuccessCode = 1; + curl_easy_cleanup(conn); + curl_easy_cleanup(sslerrconn); + return; } else if (claconncode == CURLE_HTTP_RETURNED_ERROR){ fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(claconncode)); - long http_code = 0; + int http_code = 0; curl_easy_getinfo(conn, CURLINFO_RESPONSE_CODE, &http_code); fprintf(stderr, "Error code was: %d\n", http_code); + + curl_easy_cleanup(conn); return; @@ -1712,10 +1921,12 @@ void CardDAV::GetServerETagValueThread() fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(claconncode)); - long http_code = 0; + int http_code = 0; curl_easy_getinfo(conn, CURLINFO_RESPONSE_CODE, &http_code); fprintf(stderr, "Error code was: %d\n", http_code); + curl_easy_cleanup(conn); + return; } @@ -1762,7 +1973,7 @@ void CardDAV::GetServerETagValueThread() fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(conncode)); - + return; } else { @@ -1778,7 +1989,7 @@ void CardDAV::GetServerETagValueThread() xmlDocPtr xmlCardDAVDoc; - xmlCardDAVDoc = xmlReadMemory(PageData.mb_str(wxConvUTF8), PageData.Len(), "noname.xml", NULL, 0); + xmlCardDAVDoc = xmlReadMemory(PageData.mb_str(wxConvUTF8), (int)PageData.Len(), "noname.xml", NULL, 0); xmlNodePtr nodeLevel1; xmlNodePtr nodeLevel2; @@ -1801,6 +2012,9 @@ void CardDAV::GetServerETagValueThread() nodeLevel1 = nodeLevel1->next) { + bool HREFFound = FALSE; + bool ETagFound = FALSE; + for (nodeLevel2 = nodeLevel1->children; nodeLevel2 != NULL; nodeLevel2 = nodeLevel2->next) @@ -1811,9 +2025,6 @@ void CardDAV::GetServerETagValueThread() nodeLevel3 = nodeLevel3->next) { - bool HREFFound = FALSE; - bool ETagFound = FALSE; - if (!xmlStrcmp(nodeLevel3->name, (const xmlChar *)"href") || !xmlStrcmp(nodeLevel3->name, (const xmlChar *)"d:href") || !xmlStrcmp(nodeLevel3->name, (const xmlChar *)"D:href") @@ -1892,21 +2103,19 @@ void CardDAV::GetServerETagValueThread() } - if (HREFFound = TRUE && ETagFound == TRUE){ + } + + } + + if (HREFFound == TRUE && ETagFound == TRUE){ - // Add to the map data. + // Add to the map data. - xmlDataMap.insert(std::make_pair(DataFilename, ETagData)); + xmlDataMap.insert(std::make_pair(DataFilename, ETagData)); - } - - // Reset the values. + HREFFound = FALSE; + ETagFound = FALSE; - HREFFound = FALSE; - ETagFound = FALSE; - - } - } @@ -1915,7 +2124,6 @@ void CardDAV::GetServerETagValueThread() xmlFreeDoc(xmlCardDAVDoc); // Get the first result. - for (std::map::iterator iter = xmlDataMap.begin(); iter != xmlDataMap.end(); ++iter){ @@ -2005,12 +2213,10 @@ ContactListData CardDAV::GetContactList(wxString SyncTokenInc){ AbortConnection = FALSE; CURL *conn; - CURLcode conncode; wxString ServerAddressURL; wxString ServerAuth; wxString ServerAddressSSL; - wxString ServerAddressNormal; - + wxString ServerAddressNormal; conn = curl_easy_init(); @@ -2098,7 +2304,7 @@ ContactListData CardDAV::GetContactList(wxString SyncTokenInc){ std::map::iterator ActIter; struct UploadDataStruc UploadData; - ActIter = ActivityListPtr->find(ItemIndex); + ActIter = ActivityListPtr->find((int)ItemIndex); curl_slist *slist = NULL; @@ -2346,7 +2552,7 @@ ContactListData CardDAV::GetContactList(wxString SyncTokenInc){ fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(claconncode)); - long http_code = 0; + int http_code = 0; curl_easy_getinfo(conn, CURLINFO_RESPONSE_CODE, &http_code); fprintf(stderr, "Error code was: %d\n", http_code); @@ -2356,7 +2562,7 @@ ContactListData CardDAV::GetContactList(wxString SyncTokenInc){ fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(claconncode)); - long http_code = 0; + int http_code = 0; curl_easy_getinfo(conn, CURLINFO_RESPONSE_CODE, &http_code); fprintf(stderr, "Error code was: %d\n", http_code); @@ -2411,9 +2617,9 @@ ContactListData CardDAV::GetContactList(wxString SyncTokenInc){ fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(claconncode)); - long http_code = 0; + int http_code = 0; curl_easy_getinfo(conn, CURLINFO_RESPONSE_CODE, &http_code); - fprintf(stderr, "Error code was: %l\n", http_code); + fprintf(stderr, "Error code was: %i\n", http_code); return ContactListFinal; @@ -2421,9 +2627,9 @@ ContactListData CardDAV::GetContactList(wxString SyncTokenInc){ fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(claconncode)); - long http_code = 0; + int http_code = 0; curl_easy_getinfo(conn, CURLINFO_RESPONSE_CODE, &http_code); - fprintf(stderr, "Error code was: %l\n", http_code); + fprintf(stderr, "Error code was: %i\n", http_code); return ContactListFinal; @@ -2432,7 +2638,7 @@ ContactListData CardDAV::GetContactList(wxString SyncTokenInc){ } xmlDocPtr xmlCardDAVDoc; - xmlCardDAVDoc = xmlReadMemory(PageData.mb_str(wxConvUTF8), PageData.Len(), "noname.xml", NULL, 0); + xmlCardDAVDoc = xmlReadMemory(PageData.mb_str(wxConvUTF8), (int)PageData.Len(), "noname.xml", NULL, 0); xmlNodePtr nodeLevel1; xmlNodePtr nodeLevel2; @@ -2541,8 +2747,8 @@ ContactListData CardDAV::GetContactList(wxString SyncTokenInc){ if ((!xmlStrcmp(nodeStatusLv1->name, (const xmlChar *)"status") || !xmlStrcmp(nodeStatusLv1->name, (const xmlChar *)"d:status") || - !xmlStrcmp(nodeStatusLv1->name, (const xmlChar *)"D:status") && HTTPStatus == FALSE) - ){ + !xmlStrcmp(nodeStatusLv1->name, (const xmlChar *)"D:status")) && HTTPStatus == FALSE) + { // Get the filename. @@ -2750,8 +2956,8 @@ ContactListData CardDAV::GetContactList(wxString SyncTokenInc){ if ((!xmlStrcmp(nodeStatusLv1->name, (const xmlChar *)"status") || !xmlStrcmp(nodeStatusLv1->name, (const xmlChar *)"d:status") || - !xmlStrcmp(nodeStatusLv1->name, (const xmlChar *)"D:status") && HTTPStatus == FALSE) - ){ + !xmlStrcmp(nodeStatusLv1->name, (const xmlChar *)"D:status")) && HTTPStatus == FALSE) + { // Get the filename. @@ -3147,7 +3353,7 @@ wxString CardDAV::GetDefaultAddressBookURL(){ // Process the XML data from the application. xmlDocPtr xmlCardDAVDoc; - xmlCardDAVDoc = xmlReadMemory(PageData.mb_str(wxConvUTF8), PageData.Len(), "noname.xml", NULL, 0); + xmlCardDAVDoc = xmlReadMemory(PageData.mb_str(wxConvUTF8), (int)PageData.Len(), "noname.xml", NULL, 0); xmlNodePtr nodeLevel1; xmlNodePtr nodeLevel2; @@ -3326,7 +3532,7 @@ wxString CardDAV::GetDefaultAddressBookURL(){ } - xmlCardDAVDoc = xmlReadMemory(PageData.mb_str(wxConvUTF8), PageData.Len(), "noname.xml", NULL, 0); + xmlCardDAVDoc = xmlReadMemory(PageData.mb_str(wxConvUTF8), (int)PageData.Len(), "noname.xml", NULL, 0); for (nodeLevel1 = xmlCardDAVDoc->children; nodeLevel1 != NULL; @@ -3497,7 +3703,7 @@ wxString CardDAV::GetDefaultAddressBookURL(){ } - xmlCardDAVDoc = xmlReadMemory(PageData.mb_str(wxConvUTF8), PageData.Len(), "noname.xml", NULL, 0); + xmlCardDAVDoc = xmlReadMemory(PageData.mb_str(wxConvUTF8), (int)PageData.Len(), "noname.xml", NULL, 0); for (nodeLevel1 = xmlCardDAVDoc->children; nodeLevel1 != NULL;