bool KFile::setFile(KData fullFilePath, int mode) { if (m_bIsOpen) { fclose (m_hFile); m_bIsOpen = false; } #ifndef WIN32 replaceAll(fullFilePath); #endif if (fullFilePath.find("/") == -1) //斜杠…… { m_kFilePath = "./"; m_kFileName = fullFilePath; } else { KData tStr = fullFilePath; if (tStr[tStr.length() - 1] == '/') { return false; } else { int pos = tStr.findlast("/"); m_kFilePath = tStr.substr(0, pos + 1); m_kFileName = tStr.substr(pos + 1, tStr.length() - pos - 1); } } return open(mode); }
int KHttp::getHttpFile(const KData& fullUrl, const KData& savefile, int startpos) { string strPath = fullUrl; Trim(strPath); KData dtServer; KData dtFile; KData kDTFullUrl = strPath; LOGD("kDTFullUrl is %s",kDTFullUrl.getDataBuf()); if (isEqualNoCase(kDTFullUrl.substr(0, 7), "http://")) { kDTFullUrl = kDTFullUrl.substr(7); } int nPos = kDTFullUrl.find("/"); if (nPos == -1) { LOGERROR("nPos = -1"); return 0; } else { dtServer = kDTFullUrl.substr(0, nPos); dtFile = kDTFullUrl.substr(nPos); } return getHttpFile(dtServer, dtFile, savefile, startpos); }
bool KDirectory::createDir(const KData& dir) { int pos = 0; while (true) { if ((pos = dir.find("/", pos)) == -1) pos = dir.length(); KData dtDir = dir.substr(0, pos); pos++; if (!dtDir.isEmpty()) { if (!isDirectoryExist(dtDir)) { /* if ( -1 == mkdir(dtDir.getData(),S_IRWXU|S_IRWXG|S_IRWXO) ) { return false; } */ if (MKDIR(dtDir.getData()) != 0) { return false; } } } if (pos >= (int) dir.length()) break; } return true; }
void KNetworkAddress::setHostName( const KData& theAddress ) { const char* cstrAddress; KData sAddress, sPort; unsigned int length = theAddress.length(); unsigned int colonPos = length; cstrAddress = theAddress.getData(); for ( int i = 0; *cstrAddress != '\0'; cstrAddress++, i++ ) { if ( *cstrAddress == ':' ) { colonPos = i; break; } } if ( colonPos != length ) { sAddress = theAddress.substr( 0, colonPos ); sPort = theAddress.substr( colonPos+1, length-colonPos-1 ); colonPos = atoi( sPort.getData() ); if ( colonPos ) { aPort = colonPos; } else { } } else // No ':' in input string; { sAddress = theAddress; } rawHostName = sAddress; ipAddressSet = false; }
bool KDirectory::createFileDir(const KData& dir) { int pos = 0; while (true) { if ((pos = dir.find("/", pos)) == -1) break; KData dtDir = dir.substr(0, pos); pos++; if (!dtDir.isEmpty()) { if (!isDirectoryExist(dtDir)) { if (MKDIR(dtDir.getData()) != 0) { return false; } } } } return true; }
int KHttp::getHttpFileLength(const KData & fullUrl) { KData server; KData httpFile; KData dtFullUrl = fullUrl; if (isEqualNoCase(dtFullUrl.substr(0, 7), "http://")) { dtFullUrl = dtFullUrl.substr(7); } int pos = dtFullUrl.find("/"); if (pos == -1) { return -1; } else { server = dtFullUrl.substr(0, pos); httpFile = dtFullUrl.substr(pos); } m_bChunked = false; m_iWriteLen = 0; m_iLength = 0; m_clientSock.close(); m_kCnnect.close(); _respHeadMap.clear(); m_iNotifyPos = 0; m_iNotifyGap = 0; m_iContentLength = 0; m_iStatusCode = 0; bool bGet = (_paramMap.size() == 0); KFile file; KData httpRequest; KData dtPost; if (bGet) { httpRequest = "GET "; } else { httpRequest = "POST "; map<KData, KData>::iterator iter; for (iter = _paramMap.begin(); iter != _paramMap.end(); iter++) { if (iter != _paramMap.begin()) dtPost += "&"; dtPost += iter->first; dtPost += "="; dtPost += iter->second; } } httpRequest += httpFile; httpRequest += " HTTP/1.1"; httpRequest += CRLF; httpRequest += "Host: "; httpRequest += server; httpRequest += CRLF; httpRequest += "Accept: */*"; httpRequest += CRLF; if (!m_dtUserAgent.isEmpty()) { httpRequest += "User-Agent: "; httpRequest += m_dtUserAgent; httpRequest += CRLF; } httpRequest += "Pragma: no-cache"; httpRequest += CRLF; httpRequest += "Cache-Control: no-cache"; httpRequest += CRLF; httpRequest += "Connection: close"; httpRequest += CRLF; if (!bGet) { httpRequest += "Content-Type: application/x-www-form-urlencoded"; httpRequest += CRLF; httpRequest += "Content-Length: "; httpRequest += KData((int) dtPost.length()); httpRequest += CRLF; } httpRequest += CRLF; char buff[MTU] = { 0 }; m_clientSock.setServer(server, 80); if (!m_clientSock.connect()) { return 0; } m_kCnnect = m_clientSock.getConn(); m_kCnnect.setTimeout(m_timeout); if (m_kCnnect.writeData(httpRequest) != (int) httpRequest.length()) return 0; m_iWritedBytes += httpRequest.length(); if (!bGet) { if (m_kCnnect.writeData(dtPost) != (int) dtPost.length()) return 0; m_iWritedBytes += dtPost.length(); } int iRead; m_iStatusCode = 0; memset(buff, 0, MTU); if ((iRead = m_kCnnect.readLine(buff, MTU)) <= 0) { m_iReadedBytes += iRead; return 0; } KData dtKData; KData dtLine(buff, iRead); if (dtLine.match(SP, &dtKData, true) == NOT_FOUND) { return 0; } if (dtKData != "HTTP/1.1" && dtKData != "HTTP/1.0") { return 0; } if (dtLine.match(SP, &dtKData, true) == NOT_FOUND) { return 0; } m_iStatusCode = (int) dtKData; while ((iRead = m_kCnnect.readLine(buff, MTU)) > 0) { m_iReadedBytes += iRead; KData dtLine(buff, iRead); KData dtBefVal; if (FOUND == dtLine.match(":", &dtBefVal, true)) { dtBefVal.removeSpaces(); dtLine.removeSpaces(); if (isEqualNoCase(dtBefVal, "Content-Length")) { return (int) dtLine; } } } return 0; }