void odisplay_doFullPacket(t_odisplay *x, long len, char *ptr) { osc_bundle_s_wrap_naked_message(len, ptr); long copylen = len; char *copyptr = osc_mem_alloc(len); memcpy(copyptr, ptr, len); t_osc_bndl_s *b = osc_bundle_s_alloc(copylen, copyptr); odisplay_newBundle(x, NULL, b); #ifdef OMAX_PD_VERSION jbox_redraw((t_jbox *)x); #else qelem_set(x->qelem); #endif }
void ocoll_fullPacket_impl(t_ocoll *x, long len, char *ptr) { osc_bundle_s_wrap_naked_message(len, ptr); if(len == OSC_HEADER_SIZE){ // empty bundle return; } critical_enter(x->lock); if(x->buffer_pos + len > x->buffer_len){ char *tmp = (char *)osc_mem_resize(x->buffer, x->buffer_pos + len); if(!tmp){ object_error((t_object *)x, "Out of memory...sayonara max..."); critical_exit(x->lock); return; } x->buffer = tmp; memset(x->buffer + x->buffer_pos, '\0', len); x->buffer_len = x->buffer_pos + len; } t_osc_bndl_it_s *it = osc_bndl_it_s_get(len, ptr); while(osc_bndl_it_s_hasNext(it)){ t_osc_msg_s *m = osc_bndl_it_s_next(it); t_osc_msg_ar_s *match = osc_bundle_s_lookupAddress(x->buffer_pos, x->buffer, osc_message_s_getAddress(m), 1); if(!match){ long l = osc_message_s_getSize(m) + 4; memcpy(x->buffer + x->buffer_pos, osc_message_s_getPtr(m), l); x->buffer_pos += l; }else{ // this function can resize its buffer, but we don't have to worry about that // since we already resized it above to accommidate the entire bundle int i; for(i = 0; i < osc_message_array_s_getLen(match); i++){ t_osc_msg_s *mm = osc_message_array_s_get(match, i); osc_bundle_s_replaceMessage(&(x->buffer_len), &(x->buffer_pos), &(x->buffer), mm, m); } osc_message_array_s_free(match); } } osc_bndl_it_s_destroy(it); critical_exit(x->lock); }
void olistenumerate_fullPacket(t_olistenumerate *x, t_symbol *msg, int argc, t_atom *argv) { OMAX_UTIL_GET_LEN_AND_PTR; osc_bundle_s_wrap_naked_message(len, ptr); olistenumerate_doFullPacket(x, len, ptr); }
void ouniform_fullPacket(t_ouniform *x, t_symbol *msg, int argc, t_atom *argv) { OMAX_UTIL_GET_LEN_AND_PTR; osc_bundle_s_wrap_naked_message(len, ptr); ouniform_doFullPacket(x, len, ptr); }