Exemple #1
0
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);
}
Exemple #2
0
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);
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}
Exemple #5
0
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;
}
Exemple #6
0
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;
}