void SubmitData::CommSendData2Web(QMap<QString,QString> need2SubmtData,QString serverName,QString action,bool tianjiao /*= false*/) { loop = new QEventLoop(this); //http = new QHttp(this); http = new QIHttp(this, getHostAddr(tianjiao), getHostPort(tianjiao)); connect(http, SIGNAL(done(bool)),this, SLOT(on_http_done(bool))); //http->setHost(getHostAddr(),getHostPort()); //IpaType QHttpRequestHeader header("POST", "http://" + getHostAddr(tianjiao) + ":" + QString::number(getHostPort(tianjiao)) + "/" + serverName) ; header.setValue("Host", getHostAddr(tianjiao)) ; header.setContentType("text/xml"); QString data; data.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); data.append("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"); data.append("<soap:Body>"); data.append("<" + action + " xmlns=\"http://tempuri.org/\">"); data.append("<request>"); QMapIterator<QString, QString> it(need2SubmtData); while (it.hasNext()) { it.next(); data.append("<" + it.key() +">" + it.value() + "</" + it.key() + ">"); } data.append("</request>"); data.append("</" + action + ">"); data.append("</soap:Body>"); data.append("</soap:Envelope>"); http->request(header, data.toUtf8()) ; loop->exec(); }
int main(int argc, char *argv[]) { int ret_status; int i, res; char local_ip[IP4_MAX_LEN], remote_ip[IP4_MAX_LEN]; uint16_t local_port = PORT_NUM, remote_port; uint16_t send_port, recv_port, fax_rem_port; uint32_t fax_rem_ip; char buffer[512]; char tiff_filename[64], recv_filename[64]; int buflen; int len; int ses_count = 0; int sock; char call_id_str[FAX_MAX_SESSION_CNT]; sig_message_t *msg_req = NULL; sig_message_t *msg_resp = NULL; fax_session_t *f_session[FAX_MAX_SESSION_CNT][2]; pthread_t f_thread[FAX_MAX_SESSION_CNT][2]; struct stat st; if (argc < 5) { printf("Not enough arguments: [REMOTE_HOST] [REMOTE_PORT] [SESSION_COUNT] [TIFF_FILE_TO_SEND]\n"); ret_status = EXIT_FAILURE; goto _exit; } ses_count = strtoul(argv[3], NULL, 10); if (ses_count > FAX_MAX_SESSION_CNT) { printf("Too many sessions! No more then %d supported\n", FAX_MAX_SESSION_CNT); ret_status = EXIT_FAILURE; goto _exit; } strncpy(tiff_filename, argv[4], sizeof(tiff_filename)); if (stat(tiff_filename, &st)) { printf("Tiff file error ('%s'): %s\n", tiff_filename, strerror(errno)); ret_status = EXIT_FAILURE; goto _exit; } strcpy(local_ip, getLocalIP("eth0")); printf("Local IP is '%s:%d'\n", local_ip, local_port); if ((sock = socket_init(local_ip, local_port)) < 0) { ret_status = EXIT_FAILURE; goto _exit; } if ((res = getHostAddr(argv[1], argv[2], &remote_addr))) { printf("getaddrinfo() error: %s\n", gai_strerror(res)); ret_status = EXIT_FAILURE; goto _exit; } strcpy(remote_ip, inet_ntoa(remote_addr.sin_addr)); remote_port = ntohs(remote_addr.sin_port); printf("Remote IP is '%s:%d'\n", remote_ip, remote_port); for(i = 0; i < ses_count; i++) { sprintf(call_id_str, "0000000%d", i + 1); send_port = FAX_SEND_PORT_START + i; recv_port = FAX_RECV_PORT_START + i; f_session[i][0] = f_session[i][1] = NULL; sig_msgCreateSetup(call_id_str, ntohl(inet_addr(local_ip)), send_port, ntohl(inet_addr(local_ip)), recv_port, FAX_MODE_GW_GW, (sig_message_setup_t **)(&msg_req)); sig_msgCompose(msg_req, buffer, sizeof(buffer)); buflen = strlen(buffer); printf("buffer_len: %d buffer: '%.*s'", buflen, buflen, buffer); if ((len = sendPacket((uint8_t *)buffer, buflen)) != -1) { printf("Data sent to %s:%d: len=%d buf='%s'\n", inet_ntoa(remote_addr.sin_addr), ntohs(remote_addr.sin_port), buflen, buffer); } else { perror("sendPacket() failed"); ret_status = EXIT_FAILURE; goto _exit; } if ((len = recvPacket((uint8_t *)buffer, sizeof(buffer))) != -1) { printf("Data received form %s:%d len=%d buf='%s'\n", inet_ntoa(remote_addr.sin_addr), ntohs(remote_addr.sin_port), len, buffer); } else { perror("recvfrom() failed"); ret_status = EXIT_FAILURE; } sig_msgParse(buffer, &msg_resp); sig_msgPrint(msg_resp, buffer, sizeof(buffer)); printf("MSG Response: %s\n", buffer); fax_rem_ip = ((sig_message_ok_t *)msg_resp)->ip; fax_rem_port = ((sig_message_ok_t *)msg_resp)->port; /* Sending thread */ f_thread[i][0] = start_fax_session(SEND, call_id_str, send_port, fax_rem_ip, fax_rem_port, tiff_filename, &(f_session[i][0])); /* If we do without fork() - received filed will be distorted, * don't know why. * * Most of all - spandsp bug, not sure */ if(!fork()) { if(msg_resp->type != FAX_MSG_OK) exit(1); sprintf(recv_filename, "received_fax_%02d.tif", i); /* Receiving thread */ f_thread[i][1] = start_fax_session(RECV, call_id_str, recv_port, 0, 0, recv_filename, &f_session[i][0]); pthread_join(f_thread[i][1], NULL); if(f_session[i][1]) free(f_session[i][1]); exit(0); } sig_msgDestroy(msg_req); sig_msgDestroy(msg_resp); msg_req = NULL; msg_resp = NULL; } for(i = 0; i < ses_count; i++) { pthread_join(f_thread[i][0], NULL); } for(i = 0; i < ses_count; i++) { if(f_session[i][0]) free(f_session[i][0]); } _exit: if (sock > -1) { shutdown(sock, SHUT_RDWR); close(sock); } return ret_status; }
void reception::traitement(char * messageStr, int size) { QHostAddress hoteCourant; quint16 portCourant; int numKey; //const static unsigned char key[]={0xB0,0xA1,0x73,0x37,0xA4,0x5B,0xF6,0x72,0x87,0x92,0xFA,0xEF,0x7C,0x2D,0x3D,0x4D, 0x60,0x3B,0xC5,0xBA,0x4B,0x47,0x81,0x93,0x54,0x09,0xE1,0xCB,0x7B,0x9E,0x17,0x88}; hoteCourant = getHostAddr(); portCourant = getHostPort(); cout << "Génération du token..." << endl; string token = m_ts->GenToken(hoteCourant,portCourant); cout << "Token généré." << endl; cout << "Got somethin" << endl; Requete req; string input = mess->decrypt((unsigned char*) messageStr, size); if(mess->getEChangeKey()) { clientFront cli; cli.socBind(); cli.emission(mess->getToSendArray(), sizeof(char)*258); } else { numKey = mess->getNumClient(); cout << "input : " << input << endl; if(req.decoupage(input)) { //input = token + "*" + input + "*"; cout << "tata" << endl; cout << "lenom ici : " << req.getNom() << endl; cout << "lenom ici : " << req.getNom() << endl; req.construction(); cout << "lenom ici : " << req.getNom() << endl; cout << "lenom ici : " << req.getNom() << endl; cout << "tata" << endl; if(req.getPourBdd()) { m_bdd->emission(req.getRequete()); m_bdd->attendLecture(300); string messBdd = m_bdd->getMsg(); list<string> listReponseBdd; listReponseBdd.push_back(messBdd); req.tri(listReponseBdd); } else { cout << "lenom ici : " << req.getNom() << endl; cout << "lenom ici : " << req.getNom() << endl; string traitement = req.getAffectation(); string option = req.getOption(); string parametre = req.getParametre(); if(option.compare("-n")==0) { /* traitement est une affectation */ m_netinf->send_look(traitement, token); cout << "ici envoi" << endl; } else if(option.compare("-e")==0) { m_netinf->send_exist(traitement, token); } if(option.compare("-r")==0) { m_netinf->send_lookrec(parametre,traitement, token); } list<string> * listReponse = m_ts->startTimer(token, 5000); cout << "lenom ici : " << req.getNom() << endl; if(!listReponse->empty()) { string option = req.getOption(); if(req.tri(*listReponse) == 1 && !option.compare("-r")) { string pubR = req.getPub(); string requeteP = req.getRequete(); token = m_ts->GenToken(hoteCourant,portCourant); m_netinf->send_pull(requeteP, pubR, token); list<string> * listReponsePull = m_ts->startTimer(token, 5000); req.tri(*listReponsePull); } } else { cout << "Temps maximum écoulé, pas de réponse" << endl; req.setResultat("N*empty*"); } } QString retour; retour = QString("%1").arg(req.getResultat().c_str()); //msg2.entete(); //msg2.chiffrement(key); cout << "resultat : " << req.getResultat() << endl; string resultat =req.getResultat(); cout << numKey << endl; char * chiffrer = mess->crypt((unsigned char*) resultat.data(), resultat.size(), numKey); //string toto = msg2.getMsg().toStdString(); cout << chiffrer << endl; clientFront cli; cli.socBind(); cli.emission(chiffrer, req.getResultat().size()+16-(req.getResultat().size()%16));//, hoteCourant, portCourant); } } }
int main(int argc, char *argv[]) { int sock = -1; int ret_status = 0; struct sockaddr_in local_addr; struct sockaddr_in remote_addr; int reuse = 0; int syncnt = 1; int i, res; char local_ip[IP4_MAX_LEN], remote_ip[IP4_MAX_LEN]; unsigned local_port = PORT_NUM, remote_port; char buf[1024] = {0}; int len; if (argc < 3) { printf("Not enough arguments: [REMOTE_HOST] [REMOTE_PORT]\n"); ret_status = EXIT_FAILURE; goto _exit; } strcpy(local_ip, getLocalIP("eth0")); printf("Local IP is '%s:%d'\n", local_ip, local_port); local_addr.sin_family = AF_INET; local_addr.sin_addr.s_addr = inet_addr(local_ip); local_addr.sin_port = htons(local_port); if ((res = getHostAddr(argv[1], argv[2], &remote_addr))) { printf("getaddrinfo() error: %s\n", gai_strerror(res)); ret_status = EXIT_FAILURE; goto _exit; } strcpy(remote_ip, inet_ntoa(remote_addr.sin_addr)); remote_port = ntohs(remote_addr.sin_port); printf("Remote IP is '%s:%d'\n", remote_ip, remote_port); if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket() failed"); ret_status = EXIT_FAILURE; goto _exit; } // fcntl(sock, F_SETFL, O_NONBLOCK); signal(SIGINT, &sigint_handler); gl_sock = sock; printf("Client socket created. fd: %d\n", sock); if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) { perror("setsockopt() failed"); ret_status = EXIT_FAILURE; goto _exit; } if (setsockopt(sock, IPPROTO_TCP, TCP_SYNCNT, &syncnt, sizeof(syncnt)) < 0) { perror("setsockopt() failed"); ret_status = EXIT_FAILURE; goto _exit; } if (bind(sock, (struct sockaddr *)&local_addr, sizeof(local_addr)) < 0) { perror("bind() failed"); ret_status = EXIT_FAILURE; goto _exit; } if (connect(sock, (struct sockaddr *)&remote_addr, sizeof(remote_addr)) < 0) { perror("connect() failed"); ret_status = EXIT_FAILURE; goto _exit; } strcpy(buf, "Test message from client."); for(i = 0; i < 5; i++) { if ((len = send(sock, buf, strlen(buf), 0)) != -1) { printf("Data sent to %s:%d: len=%d buf='%s'\n", remote_ip, remote_port, len, buf); } else { perror("send() failed"); ret_status = EXIT_FAILURE; goto _exit; } sleep(2); } _exit: if (sock > -1) { shutdown(sock, SHUT_RDWR); close(sock); } return ret_status; }
/** * Formulate the Http Request and send it. * Read the response for meta-information and parse the Server Configuration information. * Params : URL , port no and the method (HEAD or GET) */ int HttpSocket::sendHttpRequest(HttpParams *hq) { CString strurl, useragent, httpRequest; HTTP_METHOD method; CONN_TYPE connType; int port=0, proxyport=0; char strPortno[6] = {0}; strurl = hq->getURI(); method = hq->getHttpMethod(); useragent = hq->getUserAgent(); connType = hq->getConnType(); port = hq->getHttpPort(); if((sessionErrorCode = parseURL(strurl)) != 0) return sessionErrorCode; /** If the port is specified in the URI * that gets the priority over what is * specified in the HTTP port edit box. */ if(isPortSpecified()==true) port = portNo; else portNo = port; /** If the port is not specified by the * user in the HTTP port edit control * then use the default port 80 */ if(isValidPortRange(port)==false) { sessionErrorCode = InvalidHTTPPortNo; return sessionErrorCode; } /** Construct the HTTP request to be sent to the * HTTP Server. */ if(method == HEAD) httpRequest = "HEAD "; else httpRequest = "GET "; /** If the HTTP connection is through the proxy, the * absolute URI of the resource requested needs to * be send as a parmeter of the HTTP method in HTTP * header. */ if(connType == THRU_PROXY) { /** The resource with http port needs to be given * as specified in the requested URI. */ if(isPortSpecified()==true) { itoa(port,strPortno,10); httpRequest = httpRequest + scheme + host + ":" + CString(strPortno) + resource + " HTTP/1.1\r\n"; } else httpRequest = httpRequest + scheme + host + resource + " HTTP/1.1\r\n"; } else httpRequest = httpRequest + resource + " HTTP/1.1\r\n"; httpRequest = httpRequest + "Host: " + host + "\r\n"; httpRequest = httpRequest + "User-Agent: " + useragent + "\r\n"; httpRequest = httpRequest + "Accept: */*\r\n"; httpRequest = httpRequest + "Accept-Language: en-us,en;q=0.5\r\n"; httpRequest = httpRequest + "Connection: close\r\n" + "\r\n"; struct sockaddr_in hostaddr; /** * If connection is through HTTP Proxy then * TCP connection should be established with * it and then then HTTP requset needs to be * sent on the connection. */ if(connType == THRU_PROXY) { if(getHostAddr(hq->getProxyIP(),hostaddr) != 0) { return sessionErrorCode; } hostaddr.sin_port = htons(hq->getProxyPort()); } else { /** Connect to the host HTTP Server on the * specified port no */ if(getHostAddr((LPCSTR)host,hostaddr) != 0) { return sessionErrorCode; } hostaddr.sin_port = htons(portNo); } if(connect(sock, (struct sockaddr *)&hostaddr, sizeof(hostaddr)) == SOCKET_ERROR) { if(connType == THRU_PROXY) sessionErrorCode = HTTPProxyConnErr; else sessionErrorCode = HTTPSrvrConnErr; return sessionErrorCode; } // Send an HTTP request to the host at the specified port no int writtenBytes = send(sock, (LPCSTR) httpRequest, httpRequest.GetLength(),0); int readBytes = 0; memset(strHttpResponse,0,RESLEN); // Clear the receive buffer if(writtenBytes <=0) { sessionErrorCode = ZeroBytesSent; return sessionErrorCode; } if(IsSocketReadible(sock)) { readBytes = recvfrom(sock, strHttpResponse, RESLEN-1, 0, 0, 0); if(readBytes > 0) { strHttpResponse[readBytes] = '\0'; } } return 0; }