//////////////////////////////////////////////////////////////////////////////// // Работа с сокетом // //////////////////////////////////////////////////////////////////////////////// /*void create_connect(void) // Часть кода нагло сперто из NatICQ и MailDaemon =) { SOCK_ADDR sa; int err; int ***p_res=NULL; unsigned int ip; char Message[128]; char FILEPATH[128]; GBS_DelTimer(&reconnect_tmr); // Закрываем таймер GBS_StartTimerProc(&CheckPing, TMR_SECOND*GPRS_AWAY, TimerCheckPing); CONECTED = 0; // Сбрасываем состояние соединения DNR_ID=0; // WriteStr("Присвоили значение переменных",LOG); ip=str2ip(HOST_NAME); // WriteStr("ip=str2ip(HOST_NAME)",LOG); if (ip!=0xFFFFFFFF) { sa.ip=ip; // WriteStr("Подключаемся по IP",LOG); goto CONECT_HOST; } err=async_gethostbyname(HOST_NAME,&p_res,&DNR_ID); // WriteStr("Запросили IP хостинга ",LOG); if (err) { if ((err==0xC9)||(err==0xD6)) { if (DNR_ID) { //if (GPRS_RESTART) GBS_DelTimer(&CheckPing); // Закрываем таймер return; // ждем готовности DNR } } else // DNR не готов { GBS_DelTimer(&CheckPing); // Закрываем таймер GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*120,do_reconnect); return; } } if (p_res) { if (p_res[3]) { DNR_TRIES=0; sa.ip=p_res[3][0][0]; CONECT_HOST: // WriteStr("Создаем сокет",LOG); sock=socket(1,1,0); // WriteStr("Проверяем созданный сокет",LOG); if (sock!=-1) { // WriteStr("Сокет создан",LOG); sa.family=1; sa.port=htons(HOST_PORT); // WriteStr("Пытаемся подключиться",LOG); if (connect(sock,&sa,sizeof(sa))!=-1) // Пытаемся подключиться, подключились { CONECTED = 1; GBS_DelTimer(&CheckPing); // Закрываем таймер GBS_StartTimerProc(&AutoPing, TMR_SECOND*PING_ENABLE, TimerPing); // Запускаем таймер // WriteStr("Подключились...",LOG); if (WRITE_IP) if (LAST_HOST != HOST_NAME) { sprintf(Message,"HOST: %s IP:%d\r\n",HOST_NAME,sa.ip); sprintf(FILEPATH,WRITE_FILEPATH); // ShowMSG(1,(int)Message); WriteStr(Message,FILEPATH); strcpy(LAST_HOST,HOST_NAME); } // WriteStr("Записали IP...",LOG); } else // Не получилось подключиться { // WriteStr("Не удалось подключиться =(",LOG); closesocket(sock); // Закрываем сокет sock=-1; } } else { GPRS_OnOff(0,1); GPRS_OnOff(1,0); } } } else DNR_TRIES--; // WriteStr("PING завершен",LOG); } void do_reconnect(void) // Переподключение { if (is_gprs_online) { if (!CONECTED) { DNR_TRIES=3; SUBPROC((void*)create_connect); // WriteStr("Переподключение..",LOG); } } } void end_socket(void) // Закрытие сокета { if (sock>=0) { shutdown(sock,2); closesocket(sock); // WriteStr("Сокет закрыт",LOG); } }*/ ///////////////////////////////// csm message /* if (PING_ENABLE) // Если авто пинг включен { switch((int)msg->data0) { case LMAN_DISCONNECT_IND: // GPRS отключен is_gprs_online=0; break; case LMAN_CONNECT_CNF: // GPRS соединен GBS_DelTimer(&reconnect_tmr); // Закрываем таймер GBS_DelTimer(&AutoPing); // Закрываем таймер GBS_DelTimer(&CheckPing); // Закрываем таймер is_gprs_online=1; GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); // Запускаем таймер переподключения break; case ENIP_DNR_HOST_BY_NAME: if ((int)msg->data1==DNR_ID) { if (DNR_TRIES) { GBS_DelTimer(&reconnect_tmr); // Закрываем таймер GBS_DelTimer(&AutoPing); // Закрываем таймер GBS_DelTimer(&CheckPing); // Закрываем таймер SUBPROC((void *)create_connect); } } break; } if ((int)msg->data1==sock) // От нашего сокета { switch((int)msg->data0) { case ENIP_SOCK_CONNECTED: // Сокет соединен { GBS_DelTimer(&reconnect_tmr); // Закрываем таймер // GBS_DelTimer(&AutoPing); // Закрываем таймер GBS_DelTimer(&CheckPing); // Закрываем таймер SUBPROC((void *)SEND_PING); // Пингуем // WriteStr("Сокет соединен, пингуем",LOG); } break; case ENIP_SOCK_DATA_READ: // Пришел ответ { SUBPROC((void *)READ_PING); // Читаем его // WriteStr("Пришел ответ, прочли",LOG); } break; /* case ENIP_BUFFER_FREE: // Очередь свободна? { GBS_DelTimer(&reconnect_tmr); // Закрываем таймер // GBS_DelTimer(&AutoPing); // Закрываем таймер // GBS_DelTimer(&CheckPing); // Закрываем таймер SUBPROC((void *)TimerPing); // Запускаем таймер пинга // WriteStr("Запускаем таймер 1",LOG); // SUBPROC((void *)end_socket); } break; case ENIP_BUFFER_FREE1: // аналогично { GBS_DelTimer(&reconnect_tmr); // Закрываем таймер // GBS_DelTimer(&AutoPing); // Закрываем таймер // GBS_DelTimer(&CheckPing); // Закрываем таймер SUBPROC((void *)TimerPing); // Запускаем таймер пинга // WriteStr("Запускаем таймер 2",LOG); // SUBPROC((void *)end_socket); } break;*/ /* case ENIP_SOCK_REMOTE_CLOSED: // Сокет закрыт со стороны сервера { GBS_DelTimer(&reconnect_tmr); // Закрываем таймер GBS_DelTimer(&AutoPing); // Закрываем таймер GBS_DelTimer(&CheckPing); // Закрываем таймер SUBPROC((void *)end_socket); // Закрываем сокет // WriteStr("Сокет закрыт сервером",LOG); } break; case ENIP_SOCK_CLOSED: // Сокет закрылся { // GBS_DelTimer(&reconnect_tmr); // Закрываем таймер GBS_DelTimer(&AutoPing); // Закрываем таймер GBS_DelTimer(&CheckPing); // Закрываем таймер sock = -1; CONECTED = 0; // WriteStr("Сокет закрылся",LOG); } break; } } }*/ //////////////////////////////////////////////////////////////////////////////// // В общем сам PING =) // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /* //////////////////////////////////////////////////////////////////////////////// */ //////////////////////////////////////////////////////////////////////////////// /*void SEND_PING(void) { ICMPECHO msg_buf; if (sock) if (recv_ping) { send(sock,&msg_buf,sizeof(msg_buf),0); GetDateTime(&date,&time); send_ping = 1; recv_ping = 0; // WriteStr("послали пинг",LOG); if (GPRS_RESTART) GBS_StartTimerProc(&CheckPing, TMR_SECOND*GPRS_AWAY, TimerCheckPing); } } void READ_PING(void) { char Message[128]; ICMPECHO* buf; int ping_time=0; /* int minute, minute_; int secunde,secunde_;*/ // int i; /* if (send_ping) { recv(sock,buf,sizeof(buf),0); /// ping_time = GetIDLETime(time,date);////////////////////////////////////////////////////////////////////////////////////////////// // GetDateTime(&date_,&time_); recv_ping = 1; send_ping = 0; // WriteStr("приняли пинг",LOG); if (NOTIFY_PING) { /* for (i=1; i<=60;i++) {*/ /* minute = time_.min; minute_ = time.min; secunde = time_.sec; secunde_ = time.sec;*/ // } // minute = ((int)time_.min - (int)time.min)*60; // (50 - 49) * 60 = 60 // secunde = ((int)time_.sec - (int)time.sec); // (00 - 10) = -10; 10-00=10 // ping_time = ((minute - minute_)*60) + (secunde - secunde_); // 60 - 10 = 50; /* sprintf(Message,PING_MESSAGE,(int)ping_time); /* char Messages[64]; sprintf(Messages, perc_s,Message);*/ /* ShowMessage(Message); // ShowMSG(1,(int)Messages); } if (GPRS_RESTART) { if (ping_time > GPRS_LONG) { GPRS_OnOff(0,1); GPRS_OnOff(1,0); } } GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*PING_TIME,create_connect); // SUBPROC((void *)TimerPing); } } //////////////////////////////////////////////////////////////////////////////// /* //////////////////////////////////////////////////////////////////////////////// */ //////////////////////////////////////////////////////////////////////////////// /*void TimerPing(void) { if (PING_ENABLE) { SUBPROC((int *)SEND_PING); } GBS_StartTimerProc(&AutoPing, TMR_SECOND*PING_TIME, TimerPing);// Если получилось подключиться или авто пинг выключен, то запускаем таймер через 60 секунд } void TimerCheckPing(void) { if (send_ping) if (!recv_ping) if (GPRS_RESTART) { GPRS_OnOff(0,1); GPRS_OnOff(1,0); } // GBS_StartTimerProc(&CheckPing, TMR_SECOND*GPRS_AWAY, TimerCheckPing); } */