/********************************************************************** * Project : Notify Applications * Description : Notify <Ip Addr> <Login> <Pw> <TelNum> <Message> **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #include <string.h> #include <time.h> #include <winsock.h> #include <winbase.h> #define SERV_PORT 8000 #define MAX_SEND_QUEUE_LEN 255 #define MAX_RET_MSG_LEN 128 #define INTERFACE_TYPE 0 char IpAddr[20] = ""; char Login[20] = ""; char Pw[20] = ""; char TelNum[20] = ""; char MsgId[50]= ""; char Msg[300] = ""; char TmpStr[300]; struct Send_Msg{ unsigned char interface_type; unsigned char msg_type; unsigned char msg_content_len; char msg_content[MAX_SEND_QUEUE_LEN]; }; struct Ret_Msg{ unsigned char ret_code; char ret_description[MAX_RET_MSG_LEN]; }; int FillMsg(char *src, char *target, int n) { int i,len; len = strlen(target); for(i=0; i<len; i++) src[n++] = target[i]; src[n++] = '\0'; return(n); } void LogMessage(char *info) { char str_time[50]; time_t tnow; struct tm *lctime; FILE *fp; if( (fp=fopen("notify.log","a+")) == NULL ) return; time(&tnow); lctime = localtime(&tnow); strftime(str_time, 80, "%Y%m%d.%H%M%S", lctime); sprintf(TmpStr,"%s %8s %8s %10s %s %s\n", str_time, Login, MsgId, TelNum, info, Msg); fputs(TmpStr, fp); fclose(fp); } void main(int argc, char *argv[]) { int i,iPos,result; struct Send_Msg sendMsg; struct Ret_Msg retMsg; struct sockaddr_in servAddr; WSADATA WSAData; SOCKET clientSD = -1; int iCount = 0; if(argc<6) { printf("\nUsage : notify <Ip Addr> <Login> <Pw> <TelNum> <Msg> "); printf("\n <ex>: notify 10.81.50.72 test test1 0932444123 System Crit Alarm"); printf("\nOutput: notify.log"); printf("\n <ex>: <Date.Time> <Login> <MessageId> <TelNum> <Status> <Msg>"); LogMessage("Fail:Argument_Error"); exit(0); } strcpy(IpAddr, argv[1]); strcpy(Login, argv[2]); strcpy(Pw, argv[3]); strcpy(TelNum, argv[4]); strcpy(Msg, ""); for(i=5; i<argc; i++) {strcat(Msg,argv[i]); strcat(Msg," "); } Msg[160] = '\0'; /******* Startup Win Socket *******/ result = WSAStartup((WORD)((1 << 8) | 1), (LPWSADATA)&WSAData); if(result != 0){ printf("WSAStartup() error, program exits now\n"); LogMessage("Fail:Socket_Start_Error"); exit(0); } /******* Socket Connect *******/ if((clientSD = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET){ printf("Socket create error\n"); LogMessage("Fail:Socket_Create_Error"); exit(0); } memset((char *)&servAddr, 0, sizeof(servAddr)); servAddr.sin_family = PF_INET; servAddr.sin_port = htons(SERV_PORT); servAddr.sin_addr.s_addr = inet_addr(IpAddr); if(connect(clientSD, (struct sockaddr far *)&servAddr, sizeof(servAddr)) !=0){ printf("Connect Error !"); closesocket(clientSD); WSACleanup(); LogMessage("Fail:Socket_Connect_Error"); exit(0); } /******* 檢查Username,Pw帳號/密碼 *******/ memset((char *)&sendMsg, 0, sizeof(sendMsg)); sendMsg.interface_type = INTERFACE_TYPE; sendMsg.msg_type = 0; iPos = 0; iPos = FillMsg(&sendMsg.msg_content[0], Login, iPos); iPos = FillMsg(&sendMsg.msg_content[0], Pw, iPos); sendMsg.msg_content_len = iPos; if(send(clientSD, (char *)&sendMsg, sizeof(sendMsg), 0) == SOCKET_ERROR){ printf("Sending data error\n"); closesocket(clientSD); WSACleanup(); LogMessage("Fail:Sending_Data_Error"); exit(0); } memset((char *)&retMsg, 0, sizeof(retMsg)); result = recv(clientSD, (char *)&retMsg, sizeof(retMsg), 0); if((result == SOCKET_ERROR) || (result <= 0)){ printf("Receiving Error !\n"); closesocket(clientSD); WSACleanup(); LogMessage("Fail:Receiving_Error"); exit(0); } if(retMsg.ret_code != 0 ) { printf("Login/Password_Error !\n"); closesocket(clientSD); WSACleanup(); LogMessage("Fail:Login/Password_Error"); exit(0); } printf("\n%s", retMsg.ret_description); /******* 傳送訊息(立即傳送) *******/ memset((char *)&sendMsg, 0, sizeof(sendMsg)); sendMsg.interface_type = INTERFACE_TYPE; sendMsg.msg_type = 1; iPos = 0; iPos = FillMsg(&sendMsg.msg_content[0], TelNum, iPos); iPos = FillMsg(&sendMsg.msg_content[0], Msg, iPos); sendMsg.msg_content[iPos++] = 100; //立即傳送 sendMsg.msg_content[iPos++] = '\0'; sendMsg.msg_content_len = iPos; if(send(clientSD, (char *)&sendMsg, sizeof(sendMsg), 0) == SOCKET_ERROR){ printf("Sending data error\n"); closesocket(clientSD); WSACleanup(); LogMessage("Fail:Sending_Error"); exit(0); } memset((char *)&retMsg, 0, sizeof(retMsg)); result = recv(clientSD, (char *)&retMsg, sizeof(retMsg), 0); if((result == SOCKET_ERROR) || (result <= 0)){ printf("Receiving Error !\n"); closesocket(clientSD); WSACleanup(); LogMessage("Fail:Receiving_Error"); exit(0); } strcpy(MsgId, retMsg.ret_description); printf("\nMessage Id:%s", MsgId); LogMessage("Success"); closesocket(clientSD); WSACleanup(); }