static void send_packet(struct mqtt_sn_connection *mqc, char* data, size_t len) { simple_udp_send(&(mqc->sock), data, len);//these datatypes should all cast fine if (mqc->keep_alive>0 && mqc->stat == MQTTSN_CONNECTED) { //normally we would use this to make sure that we are always sending data to keep the connection alive //but since the gateway does not support pubacks, we will always be relying on a //steady stream of pings to ensure that the connection stays alive. ctimer_restart(&(mqc->send_timer)); } }
/* Internal function to send network data to uIP stack */ static int check_and_send_packet(struct net_buf *buf) { struct net_tuple *tuple; struct simple_udp_connection *udp; int ret = 0; if (!netdev.drv) { return -EINVAL; } tuple = net_context_get_tuple(buf->context); if (!tuple) { return -EINVAL; } switch (tuple->ip_proto) { case IPPROTO_UDP: udp = net_context_get_udp_connection(buf->context); if (!net_context_get_receiver_registered(buf->context)) { ret = simple_udp_register(udp, tuple->local_port, #ifdef CONFIG_NETWORKING_WITH_IPV6 (uip_ip6addr_t *)&tuple->remote_addr->in6_addr, #else (uip_ip4addr_t *)&tuple->remote_addr->in_addr, #endif tuple->remote_port, udp_packet_reply, buf); if (!ret) { NET_DBG("UDP connection creation failed\n"); ret = -ENOENT; break; } net_context_set_receiver_registered(buf->context); } simple_udp_send(buf, udp, buf->data, buf->len); ret = 0; break; case IPPROTO_TCP: NET_DBG("TCP not yet supported\n"); ret = -EINVAL; break; case IPPROTO_ICMPV6: NET_DBG("ICMPv6 not yet supported\n"); ret = -EINVAL; break; } return ret; }