X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=socket_server.c;h=4b5a841466b703c2bf34c6d06733991bf59dbe96;hp=bf3bfcdab73ee72c90570a47d7df741ba18ecd37;hb=b2a665f8f1cdeb7d02c3f665d95e6a80297e21d1;hpb=7d16259958e7b3e17d7bcb2c1c296f56f9096bf1 diff --git a/socket_server.c b/socket_server.c index bf3bfcd..4b5a841 100644 --- a/socket_server.c +++ b/socket_server.c @@ -15,7 +15,7 @@ #include -char *socket_name = SOCKET_NAME; +char socket_name[128]; int sock = -1; struct sockaddr_un sock_address; @@ -26,7 +26,7 @@ struct admin_list *admin_first = NULL; */ int admin_init(void) { - unsigned long on = 1; + unsigned int on = 1; /* open and bind socket */ if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) @@ -36,6 +36,7 @@ int admin_init(void) } fhuse++; memset(&sock_address, 0, sizeof(sock_address)); + SPRINT(socket_name, SOCKET_NAME, options.lock); sock_address.sun_family = AF_UNIX; UCPY(sock_address.sun_path, socket_name); unlink(socket_name); @@ -66,6 +67,10 @@ int admin_init(void) PERROR("Failed to set socket \"%s\" into non-blocking mode. (errno=%d)\n", sock_address.sun_path, errno); return(-1); } + if (chmod(socket_name, options.socketrights) < 0) + { + PERROR("Failed to change socket rigts to %d. (errno=%d)\n", options.socketrights, errno); + } return(0); } @@ -176,6 +181,8 @@ void admin_cleanup(void) close(sock); fhuse--; } + + unlink(socket_name); } @@ -185,7 +192,7 @@ void admin_cleanup(void) int admin_interface(struct admin_queue **responsep) { struct admin_queue *response; /* response pointer */ - char *err_txt = ""; + const char *err_txt = ""; int err = 0; if (read_interfaces()) @@ -484,7 +491,7 @@ int admin_block(struct admin_queue **responsep, int portnum, int block) */ int admin_release(struct admin_queue **responsep, char *message) { - unsigned long id; + unsigned int id; struct admin_queue *response; /* response pointer */ class EndpointAppPBX *apppbx; @@ -562,7 +569,7 @@ int admin_call(struct admin_list *admin, struct admin_message *msg) /* * this function is called for response whenever a call state changes. */ -void admin_call_response(int adminid, int message, char *connected, int cause, int location, int notify) +void admin_call_response(int adminid, int message, const char *connected, int cause, int location, int notify) { struct admin_list *admin; struct admin_queue *response, **responsep; /* response pointer */ @@ -701,8 +708,8 @@ int admin_message_to_join(struct admin_msg *msg, struct admin_list *admin) } if (!join) { - PERROR("No join found with serial %d.\n", msg->ref); - return(-1); + PDEBUG(DEBUG_LOG, "No join found with serial %d. (May have been already released.)\n", msg->ref); + return(0); } /* check application */ @@ -727,7 +734,7 @@ int admin_message_to_join(struct admin_msg *msg, struct admin_list *admin) /* * this function is called for every message to remote socket */ -int admin_message_from_join(int remote_id, unsigned long ref, int message_type, union parameter *param) +int admin_message_from_join(int remote_id, unsigned int ref, int message_type, union parameter *param) { struct admin_list *admin; struct admin_queue **responsep; /* response pointer */ @@ -880,6 +887,8 @@ int admin_state(struct admin_queue **responsep) SCPY(response->am[num].u.i.interface_name, interface->name); /* portnum */ response->am[num].u.i.portnum = ifport->portnum; + /* portname */ + SCPY(response->am[num].u.i.portname, ifport->portname); /* iftype */ response->am[num].u.i.extension = interface->extension; /* block */ @@ -919,6 +928,7 @@ int admin_state(struct admin_queue **responsep) response->am[num].u.i.busy[i] = mISDNport->b_state[i]; if (mISDNport->b_port[i]) response->am[num].u.i.port[i] = mISDNport->b_port[i]->p_serial; + response->am[num].u.i.mode[i] = mISDNport->b_mode[i]; i++; } } @@ -1120,7 +1130,7 @@ int admin_handle(void) int len; int new_sock; socklen_t sock_len = sizeof(sock_address); - unsigned long on = 1; + unsigned int on = 1; int work = 0; /* if work was done */ struct Endpoint *epoint; @@ -1170,7 +1180,6 @@ int admin_handle(void) { work = 1; brokenpipe: - printf("Broken pipe on socket %d. (errno=%d).\n", admin->sock, errno); PDEBUG(DEBUG_LOG, "Broken pipe on socket %d. (errno=%d).\n", admin->sock, errno); *adminp = admin->next; free_connection(admin);