コード例 #1
0
ファイル: WSConnection_v1.cpp プロジェクト: Jamol/kuma
KMError WSConnection_V1::connect_i(const std::string& ws_url)
{
    Uri uri;
    if (!uri.parse(ws_url)) {
        return KMError::INVALID_PARAM;
    }
    std::string http_url;
    if(is_equal("wss", uri.getScheme())) {
        http_url = "https://";
    } else {
        http_url = "http://";
    }
    http_url += uri.getHost();
    auto const &str_port = uri.getPort();
    if (!str_port.empty()) {
        http_url += ":" + str_port;
    }
    http_url += uri.getPath();
    auto const &str_query = uri.getQuery();
    if(!str_query.empty()){
        http_url += "?";
        http_url += str_query;
    }
    
    addHeader(strUpgrade, "websocket");
    addHeader("Connection", "Upgrade");
    addHeader(strHost, uri.getHost());
    if (!origin_.empty()) {
        addHeader("Origin", origin_);
    }
    addHeader(kSecWebSocketKey, "dGhlIHNhbXBsZSBub25jZQ==");
    if (!subprotocol_.empty()) {
        addHeader(kSecWebSocketProtocol, subprotocol_);
    }
    if (!extensions_.empty()) {
        addHeader(kSecWebSocketExtensions, extensions_);
    }
    addHeader(kSecWebSocketVersion, kWebSocketVersion);
    
    setState(State::UPGRADING);
    auto ret = stream_->sendRequest("GET", http_url, "HTTP/1.1");
    if (ret != KMError::NOERR) {
        onStateError(ret);
    }
    return ret;
}
コード例 #2
0
ファイル: main.cpp プロジェクト: dpdltm11/NexonCUIWebBrowser
// 멀티스레드를 위한 imageRequset
void imageRequset(string tempuri, int index)
{
	int resp_leng;
	string request, response;
	char buffer[BUFFERSIZE];
	struct sockaddr_in serveraddr;
	int sock = 0;
	WSADATA wsaData;
	vector<char> image;

	Uri *uri = new Uri;
	Uri resultURL = uri->Parse(tempuri);
	resultURL.Parse(tempuri);
	if (resultURL.getProtocol() == "http" || resultURL.getProtocol() == "")
	{
		hostent* hostname = gethostbyname(resultURL.getHost().c_str());
		// Init WinSock
		WSADATA wsa_Data;
		int wsa_ReturnCode = WSAStartup(0x101, &wsa_Data);
		// Get the local hostname
		struct hostent *host_entry;
		host_entry = gethostbyname(resultURL.getHost().c_str());
		char * ipaddress;
		ipaddress = inet_ntoa(*(struct in_addr *)*host_entry->h_addr_list);
		WSACleanup();

		int port = 0;
		if (resultURL.getPort() == "")
		{
			port = 80;
		}
		else
		{
			port = atoi(resultURL.getPort().c_str());
		}
		string path = resultURL.getPath();

		if (resultURL.getHost() == "sang12456.cafe24.com")
			request = "GET " + path + " HTTP/1.1\r\n\r\n";
		else
			request = "GET " + path + " HTTP/1.1\nHost: " + resultURL.getHost() + "\r\n\r\n";//"\nConnection : keep - alive\nCache - Control : max - age = 0\nAccept : text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, */*;q=0.8\nUpgrade-Insecure-Requests: 1\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\nAccept-Encoding: gzip, deflate, sdch\nAccept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4\r\n\r\n";

																							 //init winsock
		if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0)
			return;

		//open socket
		if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
			return;

		//connect
		memset(&serveraddr, 0, sizeof(serveraddr));
		serveraddr.sin_family = AF_INET;
		serveraddr.sin_addr.s_addr = inet_addr(ipaddress);
		serveraddr.sin_port = htons(port);
		if (connect(sock, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0)
			return;

		//send request
		if (send(sock, request.c_str(), request.length(), 0) != request.length())
			return;

		//get response
		//cout << "response" << endl;
		response = "";
		resp_leng = BUFFERSIZE;

		do
		{
			resp_leng = recv(sock, (char*)&buffer, BUFFERSIZE, 0);
			copy(buffer, buffer + resp_leng, back_inserter(image));
		} while (resp_leng != 0);

		//disconnect
		closesocket(sock);

		//cleanup
		WSACleanup();
	}
	else
		response = "not valid";

	if (image[9] == '2' && image[10] == '0' && image[11] == '0')
	{
		int imageLen = image.size();
		char *binary = new char[imageLen];
		memset(binary, 0, imageLen);
		int j = 0;
		for (unsigned int k = 0; k < image.size(); k++)
		{
			binary[j] = image[k];
			j++;
		}
		// 임계영역
		mtx.lock();

		char *temp;
		if ((temp = strstr(binary, "\n\n")) != NULL)
		{
			images.insert(pair<int, char*>(index, &temp[2]));
			imagecache.insert(pair<string, char*>(tempuri, &temp[2]));
		}
		else if ((temp = strstr(binary, "\r\n\r\n")) != NULL)
		{
			images.insert(pair<int, char*>(index, &temp[4]));
			imagecache.insert(pair<string, char*>(tempuri, &temp[4]));
		}
		imagecacheSize.insert(pair<string, int>(tempuri, image.size()));
		replace(ret, tempuri+"\"image", "image");
		imageSize.insert(pair<int, int>(index, image.size()));
		mtx.unlock();
		InvalidateRect(hwndMain, &rt, TRUE);
	}
}