MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / at_connect_notice_cb

Function at_connect_notice_cb

components/net/at/at_socket/at_socket.c:740–803  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

738
739#ifdef AT_USING_SOCKET_SERVER
740static void at_connect_notice_cb(struct at_socket *sock, at_socket_evt_t event, const char *buff, size_t bfsz)
741{
742 RT_ASSERT(buff);
743 RT_ASSERT(sock == RT_NULL);
744 RT_ASSERT(event == AT_SOCKET_EVT_CONNECTED);
745
746 int new_socket;
747 struct at_socket *new_sock = RT_NULL;
748 rt_base_t level;
749 rt_slist_t *node = RT_NULL;
750 struct at_socket *at_sock = RT_NULL;
751 char *socket_info = RT_NULL;
752 int base_socket = 0;
753
754 /* avoid use bottom driver to alloc "socket" */
755 new_socket = at_socket(AF_AT, SOCK_STREAM, 0);
756 if (new_socket == -1)
757 {
758 return;
759 }
760 new_sock = at_get_socket(new_socket);
761 new_sock->state = AT_SOCKET_CONNECT;
762 rt_sscanf(buff, "SOCKET:%d", &base_socket);
763 LOG_D("ACCEPT BASE SOCKET: %d", base_socket);
764 new_sock->user_data = (void *)base_socket;
765
766 /* find out the listen socket */
767 level = rt_hw_interrupt_disable();
768 rt_slist_for_each(node, &_socket_list)
769 {
770 at_sock = rt_slist_entry(node, struct at_socket, list);
771 if (at_sock && at_sock->magic == AT_SOCKET_MAGIC && at_sock->listen.is_listen == RT_TRUE)
772 {
773 break;
774 }
775 at_sock = RT_NULL;
776 }
777 rt_hw_interrupt_enable(level);
778
779 if (at_sock == RT_NULL)
780 {
781 at_closesocket(new_socket);
782 return;
783 }
784
785 /* put incoming "socket" to the listen socket receiver packet list */
786 socket_info = rt_malloc(AT_SOCKET_INFO_LEN);
787 rt_memset(socket_info, 0, AT_SOCKET_INFO_LEN);
788 rt_sprintf(socket_info, "SOCKET:%d", new_sock->socket);
789
790 /* wakeup the "accept" function */
791 rt_mutex_take(at_sock->recv_lock, RT_WAITING_FOREVER);
792 if (at_recvpkt_put(&(at_sock->recvpkt_list), socket_info, AT_SOCKET_INFO_LEN) != RT_EOK)
793 {
794 at_closesocket(new_socket);
795 rt_free(socket_info);
796 rt_mutex_release(at_sock->recv_lock);
797 return;

Callers

nothing calls this directly

Calls 15

at_get_socketFunction · 0.85
rt_sscanfFunction · 0.85
at_closesocketFunction · 0.85
rt_mallocFunction · 0.85
rt_memsetFunction · 0.85
rt_sprintfFunction · 0.85
rt_mutex_takeFunction · 0.85
at_recvpkt_putFunction · 0.85
rt_freeFunction · 0.85
rt_mutex_releaseFunction · 0.85
rt_sem_releaseFunction · 0.85
at_do_event_changesFunction · 0.85

Tested by

no test coverage detected