static void debugCallback(int fd, short flags, void *param) {
int acceptFD, option;
struct sockaddr_un peeraddr;
socklen_t socklen = sizeof(peeraddr);
int data;
unsigned int qxdm_data[6];
const char *deactData[1] = { "1" };
char *actData[1];
RIL_Dial dialData;
int hangupData[1] = { 1 };
int number;
char **args;
acceptFD = accept(fd, (sockaddr *)&peeraddr, &socklen);
if (acceptFD < 0) {
RLOGE("error accepting on debug port: %d\n", errno);
return;
}
if (recv(acceptFD, &number, sizeof(int), 0) != sizeof(int)) {
RLOGE("error reading on socket: number of Args: \n");
return;
}
args = (char **)malloc(sizeof(char*) * number);
for (int i = 0; i < number; i++) {
int len;
if (recv(acceptFD, &len, sizeof(int), 0) != sizeof(int)) {
RLOGE("error reading on socket: Len of Args: \n");
freeDebugCallbackArgs(i, args);
return;
}
// +1 for null-term
args[i] = (char *)malloc((sizeof(char) * len) + 1);
if (recv(acceptFD, args[i], sizeof(char) * len, 0)
!= (int)sizeof(char) * len) {
RLOGE("error reading on socket: Args[%d] \n", i);
freeDebugCallbackArgs(i, args);
return;
}
char * buf = args[i];
buf[len] = 0;
}
switch (atoi(args[0])) {
case 0:
RLOGI("Connection on debug port: issuing reset.");
issueLocalRequest(RIL_REQUEST_RESET_RADIO, NULL, 0);
break;