| 61 * @param fd The file descriptor |
61 * @param fd The file descriptor |
| 62 * @param pktdata The packet data |
62 * @param pktdata The packet data |
| 63 * @param pktlen The length of the packet data |
63 * @param pktlen The length of the packet data |
| 64 * @return Return -1 on error, otherwise 0 |
64 * @return Return -1 on error, otherwise 0 |
| 65 */ |
65 */ |
| 66 static int mxit_http_raw_write( int fd, const char* pktdata, int pktlen ) |
66 static int mxit_http_raw_write( int fd, const char* pktdata, size_t pktlen ) |
| 67 { |
67 { |
| 68 int written; |
68 size_t written; |
| 69 int res; |
69 int res; |
| 70 |
70 |
| 71 written = 0; |
71 written = 0; |
| 72 while ( written < pktlen ) { |
72 while ( written < pktlen ) { |
| 73 res = write( fd, &pktdata[written], pktlen - written ); |
73 res = write( fd, &pktdata[written], pktlen - written ); |
| 313 * Create HTTP connection for sending a HTTP request |
313 * Create HTTP connection for sending a HTTP request |
| 314 * |
314 * |
| 315 * @param session The MXit session object |
315 * @param session The MXit session object |
| 316 * @param host The server name to connect to |
316 * @param host The server name to connect to |
| 317 * @param port The port number to connect to |
317 * @param port The port number to connect to |
| 318 * @param data The HTTP request data (including HTTP headers etc.) |
318 * @param header The HTTP header. |
| |
319 * @param data The HTTP request data. |
| 319 * @param datalen The HTTP request data length |
320 * @param datalen The HTTP request data length |
| 320 */ |
321 */ |
| 321 void mxit_http_send_request( struct MXitSession* session, char* host, int port, const char* data, int datalen ) |
322 void mxit_http_send_request( struct MXitSession* session, char* host, int port, gchar* header, const char* data, size_t datalen ) |
| 322 { |
323 { |
| 323 PurpleProxyConnectData* con = NULL; |
324 PurpleProxyConnectData* con = NULL; |
| 324 struct http_request* req; |
325 struct http_request* req; |
| |
326 size_t headerlen = strlen( header ); |
| 325 |
327 |
| 326 /* build the http request */ |
328 /* build the http request */ |
| 327 req = g_new0( struct http_request, 1 ); |
329 req = g_new0( struct http_request, 1 ); |
| 328 req->session = session; |
330 req->session = session; |
| 329 req->host = host; |
331 req->host = host; |
| 330 req->port = port; |
332 req->port = port; |
| 331 req->data = g_malloc0( datalen ); |
333 req->data = g_malloc0( headerlen + datalen ); |
| 332 memcpy( req->data, data, datalen ); |
334 memcpy( req->data, header, headerlen ); |
| 333 req->datalen = datalen; |
335 memcpy( req->data + headerlen, data, datalen ); |
| |
336 req->datalen = headerlen + datalen; |
| 334 |
337 |
| 335 /* open connection to the HTTP server */ |
338 /* open connection to the HTTP server */ |
| 336 con = purple_proxy_connect( NULL, session->acc, host, port, mxit_cb_http_connect, req ); |
339 con = purple_proxy_connect( NULL, session->acc, host, port, mxit_cb_http_connect, req ); |
| 337 if ( !con ) { |
340 if ( !con ) { |
| 338 purple_connection_error_reason( session->con, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _( "Unable to connect" ) ); |
341 purple_connection_error_reason( session->con, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _( "Unable to connect" ) ); |