bool Casan::get_well_known (Msg &out) { char *buf ; size_t size ; reslist *rl ; size_t avail ; bool reset ; reset = false ; out.content_format (reset, option::cf_text_plain) ; avail = out.avail_space () ; buf = (char *) malloc (avail) ; size = 0 ; for (rl = reslist_ ; rl != NULL ; rl = rl->next) { int len ; if (size > 0) // separator "," between resources { if (size + 2 < avail) { buf [size++] = ',' ; buf [size] = '\0' ; } else break ; // too large } len = rl->res->well_known (buf + size, avail - size) ; if (len == -1) break ; size += len - 1 ; // exclude '\0' } out.set_payload ((uint8_t *) buf, size) ; free (buf) ; /* * Did all resources fitted in the message, or do we left the loop * before its term? */ if (rl != NULL) { DBG1 (F (B_RED "Resource '")) ; DBG1 (rl->res->name ()) ; DBG1 (F ("' do not fit in buffer of ")) ; DBG1 (avail) ; DBGLN1 (F (" bytes" C_RESET)) ; } return rl == NULL ; // true if all res are in the message }