family = AF_INET6;
}
- if ((!(flags & MCAST_SEND) && !(flags & MCAST_RECV)) || (handle->sock = (mcast_socket_t)socket(family, SOCK_DGRAM, 0)) != mcast_sock_invalid ) {
+ if ((!(flags & MCAST_SEND) && !(flags & MCAST_RECV)) || (handle->sock = (mcast_socket_t)socket(family, SOCK_DGRAM, 0)) == mcast_sock_invalid ) {
return -1;
}
ssize_t mcast_socket_send(mcast_handle_t *handle, void *data, size_t datalen)
{
- if (handle->sock != mcast_sock_invalid) {
+ if (handle->sock == mcast_sock_invalid) {
+ errno = EINVAL;
return -1;
}
if (handle->family == AF_INET6) {
return sendto(handle->sock, data, (int)datalen, 0, (struct sockaddr *) &handle->send_addr6, sizeof(handle->send_addr6));
} else {
+ //printf("WTF %d %p %ld %s\n", handle->sock, (void *)data, datalen, inet_ntoa(handle->send_addr.sin_addr));
return sendto(handle->sock, data, (int)datalen, 0, (struct sockaddr *) &handle->send_addr, sizeof(handle->send_addr));
}
}
{
socklen_t addrlen = sizeof(handle->recv_addr);
+ if (handle->sock == mcast_sock_invalid) {
+ errno = EINVAL;
+ return -1;
+ }
+
if (data == NULL || datalen == 0) {
data = handle->buffer;
datalen = sizeof(handle->buffer);
if (jsock->profile->mcast_pub.sock != ws_sock_invalid) {
if ((json_text = cJSON_PrintUnformatted(params))) {
- if ( mcast_socket_send(&jsock->profile->mcast_pub, json_text, strlen(json_text) + 1) < 0 ) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "multicast socket send error!\n");
+ if (mcast_socket_send(&jsock->profile->mcast_pub, json_text, strlen(json_text) + 1) <= 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "multicast socket send error! %s\n", strerror(errno));
+ r = SWITCH_FALSE;
+ cJSON_AddItemToObject(*response, "message", cJSON_CreateString("MCAST Data Send failure!"));
+ } else {
+ r = SWITCH_TRUE;
+ cJSON_AddItemToObject(*response, "message", cJSON_CreateString("MCAST Data Sent"));
}
-
free(json_text);
json_text = NULL;
- r = SWITCH_TRUE;
- cJSON_AddItemToObject(*response, "message", cJSON_CreateString("MCAST Data Sent"));
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "JSON ERROR!\n");
}
profile->local_network = "localnet.auto";
+ profile->mcast_sub.sock = ws_sock_invalid;
+ profile->mcast_pub.sock = ws_sock_invalid;
+
+
for (param = switch_xml_child(xprofile, "param"); param; param = param->next) {
char *var = NULL;
char *val = NULL;