int ns__echoString(struct soap *soap, char *str, char **res) { /* Get Header info and setup response Header */ if (check_header(soap)) { printf("Malformed header\n"); return SOAP_FAULT; /* there was a problem */ } /* If message with MessageID already received, ignore it */ if (check_received(soap->header->wsa__MessageID)) { printf("Request message %s already received\n", soap->header->wsa__MessageID); return SOAP_STOP; } printf("Request message %s accepted\n", soap->header->wsa__MessageID); /* Check ReplyTo has Address */ if (!soap->header->wsa__ReplyTo || !soap->header->wsa__ReplyTo->Address) return soap_sender_fault(soap, "No WS-Addressing ReplyTo address", NULL); /* Copy Header info into response Header */ soap->header->wsa__To = soap->header->wsa__ReplyTo->Address; /* Add info to response Header */ soap->header->wsa__MessageID = soap_strdup(soap, soap_int2s(soap, id_count++)); soap->header->wsa__Action = "http://genivia.com/udp/echoStringResponse"; /* Copy request string into response string */ printf("Response message %s returned\n", soap->header->wsa__MessageID); *res = str; return SOAP_OK; }
/************************************************************************************** * * * Function: main() * * Executes the main program. Waits to receive a packet, and when comes, resend it * * to check if it is correct. If is, send ACK and decode the message, split it in * * node ID, priority of the message, sensor ID, and lecture * * If nothing happends, at five minutes send the information of every sensor. * * * **************************************************************************************/ int main(){ strcpy(ack_message, "101010"); //Hard code the ack string message pc.printf("Inicializacion completada. Recibiendo...\n"); while(1){ while(!mySwitch.available()){ } if(mySwitch.available()){ received_value = mySwitch.getReceivedValue(); received_length = mySwitch.getReceivedBitlength(); send_received(); mySwitch.resetAvailable(); } pc.printf("Esperando para el ACK\n"); time(&start); while(!mySwitch.available()){ time(&end); seconds_elapsed = difftime(start, end); if(seconds_elapsed >=2){ pc.printf("No se ha recibido el ACK, se considera la secuencia recibida valida y se pasa a su decodificacion\n"); break; } } if(mySwitch.available()){ received_ack_int = mySwitch.getReceivedValue(); check_received(); mySwitch.resetAvailable(); } if((received_value != 0) && (received_length >=7)){ decode_received_message(); } } }
static void interleave_packets(void *data, struct encoder_packet *packet) { struct obs_output *output = data; struct encoder_packet out; bool was_started; if (!active(output)) return; if (packet->type == OBS_ENCODER_AUDIO) packet->track_idx = get_track_index(output, packet); pthread_mutex_lock(&output->interleaved_mutex); /* if first video frame is not a keyframe, discard until received */ if (!output->received_video && packet->type == OBS_ENCODER_VIDEO && !packet->keyframe) { discard_unused_audio_packets(output, packet->dts_usec); pthread_mutex_unlock(&output->interleaved_mutex); if (output->active_delay_ns) obs_free_encoder_packet(packet); return; } was_started = output->received_audio && output->received_video; if (output->active_delay_ns) out = *packet; else obs_duplicate_encoder_packet(&out, packet); if (was_started) apply_interleaved_packet_offset(output, &out); else check_received(output, packet); insert_interleaved_packet(output, &out); set_higher_ts(output, &out); /* when both video and audio have been received, we're ready * to start sending out packets (one at a time) */ if (output->received_audio && output->received_video) { if (!was_started) { if (prune_interleaved_packets(output)) { if (initialize_interleaved_packets(output)) { resort_interleaved_packets(output); send_interleaved(output); } } } else { send_interleaved(output); } } pthread_mutex_unlock(&output->interleaved_mutex); }
int ns__sendString(struct soap *soap, char *str) { if (check_header(soap)) printf("Malformed header\n"); else if (check_received(soap->header->wsa__MessageID)) printf("One-way message %s already received\n", soap->header->wsa__MessageID); else printf("One-way message %s accepted and serviced\n", soap->header->wsa__MessageID); return SOAP_OK; }
static void interleave_packets(void *data, struct encoder_packet *packet) { struct obs_output *output = data; struct encoder_packet out; bool was_started; if (packet->type == OBS_ENCODER_AUDIO) packet->track_idx = get_track_index(output, packet); pthread_mutex_lock(&output->interleaved_mutex); was_started = output->received_audio && output->received_video; if (output->active_delay_ns) out = *packet; else obs_duplicate_encoder_packet(&out, packet); if (was_started) apply_interleaved_packet_offset(output, &out); else check_received(output, packet); insert_interleaved_packet(output, &out); set_higher_ts(output, &out); /* when both video and audio have been received, we're ready * to start sending out packets (one at a time) */ if (output->received_audio && output->received_video) { if (!was_started) { prune_interleaved_packets(output); if (initialize_interleaved_packets(output)) { resort_interleaved_packets(output); send_interleaved(output); } } else { send_interleaved(output); } } pthread_mutex_unlock(&output->interleaved_mutex); }