+int openURL(IoTString *url) {
+ if (url->length() < 7 || memcmp(url->internalBytes()->internalArray(), "http://", 7)) {
+ printf("BOGUS URL\n");
+ exit(-1);
+ }
+ int i = 7;
+ for(; i < url->length(); i++)
+ if (url->get(i) == '/')
+ break;
+
+ if ( i == url->length()) {
+ printf("ERROR in openURL\n");
+ exit(-1);
+ }
+
+ char * host = (char *) malloc(i - 6);
+ memcpy(host, &url->internalBytes()->internalArray()[7], i-7);
+ host[i-7] = 0;
+ printf("%s\n", host);
+
+ char * message = (char *)malloc(sizeof("POST HTTP/1.1\r\n") + sizeof("Host: \r\n") + 2*url->length());
+
+ /* fill in the parameters */
+ int post = sprintf(message,"POST ");
+ /* copy data */
+ memcpy(&message[post], &url->internalBytes()->internalArray()[i], url->length()-i);
+ int endpost = sprintf(&message[post+url->length()-i], " HTTP/1.1\r\n");
+
+ int hostlen = sprintf(&message[endpost + post + url->length()-i], "Host: ");
+ memcpy(&message[endpost + post + url->length()+hostlen-i], host, i-7);
+ sprintf(&message[endpost + post + url->length()+hostlen-7], "\r\n");
+
+ /* create the socket */
+ int sockfd = socket(AF_INET, SOCK_STREAM, 0);
+ if (sockfd < 0) {printf("ERROR opening socket\n"); exit(-1);}
+
+ /* lookup the ip address */
+ struct hostent *server = gethostbyname(host);
+ free(host);
+
+ if (server == NULL) {printf("ERROR, no such host"); exit(-1);}
+
+ /* fill in the structure */
+ struct sockaddr_in serv_addr;
+
+ memset(&serv_addr,0,sizeof(serv_addr));
+ serv_addr.sin_family = AF_INET;
+ serv_addr.sin_port = htons(80);
+ memcpy(&serv_addr.sin_addr.s_addr,server->h_addr,server->h_length);
+
+ /* connect the socket */
+ if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) {
+ printf("ERROR connecting");
+ exit(-1);
+ }