/* This is a program for sending SMS messages to bell cellphones. Compilation: On Linux/BSD: gcc -o bellsms bellsms.c On SunOS/Solaris: gcc -o bellsms bellsms.c -lsocket -lnsl Usage: bellsms "" Authors: fractal@efnet syke@efnet This program is Copyright 2003 by HardCore Software, and its distribution is protected by the GNU General Public License. See www.gnu.org for details. */ #include #include #include #include #include #include #include #include #include #define VERSION "1.0" #define HOST "www.txt.bellmobility.ca" #define PORT 80 char segment1[] = "POST /sms/sendMessage HTTP/1.0\r\nHost: "; /* INSERT HOST HERE */ char segment2[] = "\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: "; /* INSERT CONTENT LENGTH HERE */ char segment3[] = "\r\n\r\nTEMPLATE=%2Fimg%2Fsms%2Fgeneral%2Foutbox%2FmessageConfirmation.html&EXCEPTION_TEMPLATE=%2Fimg%2Fsms%2Fgeneral%2FimgHtmlException.html&TRANSPORT_TYPE=sms&MIN_NUMBER="; /* INSERT PHONE # HERE */ char segment4[] = "&SMTP_RETURNPATH=&MIN_RETURNPATH=&FROM=&CALLBACK_NUMBER=&STATUS_REQUEST=&MESSAGE_SUBJECT="; /* INSERT SENDERS NAME HERE */ char segment5[] = "&MESSAGE_BODY="; /* INSERT MESSAGE HERE */ char segment6[] = "&CHARCOUNT=0\n"; int openconnection(char *toconn, int port) { struct hostent *he; struct sockaddr_in their_addr; /* connector's address information */ int sd; if ((he=gethostbyname(toconn)) == NULL) { /* get the host info */ return -1; } if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { return -1; } their_addr.sin_family = AF_INET; /* host byte order */ their_addr.sin_port = htons(port); /* short, network byte order */ their_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(their_addr.sin_zero),'\0',8); /* zero rest of struct */ if (connect(sd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) { return -1; } return sd; } int verifyname(char *s) { int i; for (i=strlen(s)-1; i>0; i--) if (!isdigit(s[i]) && !isalpha(s[i])) return 0; return 1; } int verifynumber(char *s) { int i; if (strlen(s) != 10) return 0; for (i=0; i<10; i++) if (!isdigit(s[i])) return 0; return 1; } void encodemessage(char *src, char *dst, int len) { int i=0; len-=5; memset(dst, '\0', len); while(i \"\"\n\n"); exit(0); } /* argv[1] = phone number argv[2] = name argv[3] = message */ int main (int argc, char *argv[]) { char buf[10500], message[10000]; int clen=0; /* Check number of args... */ if (argc != 4) usage(); /* Check for valid phone number */ if (verifynumber(argv[1]) == 0) { printf("* INVALID PHONE NUMBER!\n\n"); usage(); } /* Check for valid sender name */ if (verifyname(argv[2]) == 0) { printf("* INVALID NAME!\n\n"); usage(); } /* Encode message */ encodemessage(argv[3], message, sizeof(message)); /* Count the number of chars */ clen = strlen(segment3) - 4 + strlen(argv[1]) + strlen(segment4) + strlen(argv[2]) + strlen(segment5) + strlen(message) + strlen(segment6); /* Build the request */ snprintf(buf, sizeof(buf), "%s%s%s%d%s%s%s%s%s%s%s", segment1, HOST, segment2, clen, segment3, argv[1], segment4, argv[2], segment5, message, segment6); /* Send it! */ printf("Sending request...\n"); sendrequest(buf); printf("Sent.\n"); /* And we're done! */ return 0; }