#include #include #include #include "eos.h" #include "net.h" #include "cell.h" void eos_cell_pdp_handler(unsigned char mtype, unsigned char *buffer, uint16_t buf_len) { switch (mtype) { case EOS_CELL_MTYPE_PDP_SET_APN: case EOS_CELL_MTYPE_PDP_SET_USR: case EOS_CELL_MTYPE_PDP_SET_PWD: { char *arg; size_t arg_len; buffer++; buf_len--; arg = (char *)buffer; arg_len = strnlen(arg, buf_len); if (arg_len == buf_len) break; if (arg_len >= EOS_CELL_PDP_SIZE_ARG) break; switch (mtype) { case EOS_CELL_MTYPE_PDP_SET_APN: { eos_ppp_set_apn(arg); break; } case EOS_CELL_MTYPE_PDP_SET_USR: { eos_ppp_set_usr(arg); break; } case EOS_CELL_MTYPE_PDP_SET_PWD: { eos_ppp_set_pwd(arg); break; } } break; } case EOS_CELL_MTYPE_PDP_GET_APN: case EOS_CELL_MTYPE_PDP_GET_USR: case EOS_CELL_MTYPE_PDP_GET_PWD: { char *arg; buffer[0] = EOS_CELL_MTYPE_PDP | mtype; arg = (char *)(buffer + 1); switch (mtype) { case EOS_CELL_MTYPE_PDP_GET_APN: { eos_ppp_get_apn(arg); break; } case EOS_CELL_MTYPE_PDP_GET_USR: { eos_ppp_get_usr(arg); break; } case EOS_CELL_MTYPE_PDP_GET_PWD: { eos_ppp_get_pwd(arg); break; } } eos_net_reply(EOS_NET_MTYPE_CELL, buffer, 1 + strlen(arg)); break; } case EOS_CELL_MTYPE_PDP_CONNECT: { eos_ppp_connect(); break; } case EOS_CELL_MTYPE_PDP_DISCONNECT: { eos_ppp_disconnect(); break; } } }