#include "utils.h" char *sendTCPSocketTextMessage(char *sendmessage, char *serverip, int serverport) { struct sockaddr_in to_addr, local_addr; char *readbuff; int rsocket, rc, readdata; // send the message local_addr.sin_family = AF_INET; local_addr.sin_addr.s_addr = htonl(INADDR_ANY); local_addr.sin_port = htons(0); // destination to_addr.sin_family = AF_INET; to_addr.sin_addr.s_addr = inet_addr(serverip); to_addr.sin_port = htons(serverport); // open dest socket rsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (rsocket < 0) { perror("client socket"); //return queueMessage(appkey, blogid, user, pass, message); log_message(9, "queuing message"); return NULL; } rc = bind(rsocket, (struct sockaddr *) &local_addr, sizeof(struct sockaddr_in)); if (rc < 0) { perror("client socket bind"); //return queueMessage(appkey, blogid, user, pass, message); log_message(9, "queuing message"); return NULL; } rc = connect(rsocket, (struct sockaddr *) &to_addr, sizeof(struct sockaddr_in)); if (rc < 0) { perror("client socket connect"); log_message(9, "queuing message"); //return queueMessage(appkey, blogid, user, pass, message); return NULL; } rc = send(rsocket, sendmessage, strlen(sendmessage), 0); if (rc < 0) { perror("client socket send"); //return queueMessage(appkey, blogid, user, pass, message); return NULL; } // read response readbuff = calloc(sizeof(char), (READ_BUF_MAX + 1)); readdata = 0; while ((rc = read(rsocket, &readbuff[readdata], 1500)) > 0) { readdata += rc; if ((readdata >= READ_BUF_MAX) || (rc <= 0)) { break; } } close (rsocket); return readbuff; } void unescapeString(char *fromstring, char *deststring) { int i; int j; int state; unsigned char newchar; int len = strlen(fromstring); state = 0; j = 0; newchar = 0; for (i = 0; i < len; i++) { if (state == 0) { newchar = 0; if (fromstring[i] == '%') { state = 1; } else { deststring[j++] = fromstring[i]; } } else if (state == 1) { // set top 4 bits of newchar newchar = getHex((unsigned char)fromstring[i]); newchar = (newchar << 4); state = 2; } else { // set bottom 4 bits newchar += getHex((unsigned char)fromstring[i]); deststring[j++] = newchar; state = 0; } } // for deststring[j] = 0; } unsigned char getHex(unsigned char oldbyte) { if (oldbyte == '0') { return 0; } else if (oldbyte == '1') { return 1; } else if (oldbyte == '2') { return 2; } else if (oldbyte == '3') { return 3; } else if (oldbyte == '4') { return 4; } else if (oldbyte == '5') { return 5; } else if (oldbyte == '6') { return 6; } else if (oldbyte == '7') { return 7; } else if (oldbyte == '8') { return 8; } else if (oldbyte == '9') { return 9; } else if ((oldbyte == 'a') || (oldbyte == 'A')) { return 10; } else if ((oldbyte == 'b') || (oldbyte == 'B')) { return 11; } else if ((oldbyte == 'c') || (oldbyte == 'C')) { return 12; } else if ((oldbyte == 'd') || (oldbyte == 'D')) { return 13; } else if ((oldbyte == 'e') || (oldbyte == 'E')) { return 14; } else if ((oldbyte == 'f') || (oldbyte == 'F')) { return 15; } }