Changeset 4433:df25c6da63e6 in roaraudio
- Timestamp:
- 10/09/10 15:00:11 (13 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/serverinfo.c
r4430 r4433 73 73 } 74 74 75 #define _add(t, m) do { if ( (sl = strlen(info->m)) != 0 ) { iebuf[idx].type = (t); iebuf[idx].len = sl; iebuf[idx].buf = (info->m); idx++; needlen += 4 + sl; } } while (0)75 #define _add(t, m) do { if ( info->m != NULL && (sl = strlen(info->m)) != 0 ) { iebuf[idx].type = (t); iebuf[idx].len = sl; iebuf[idx].buf = (info->m); idx++; needlen += 4 + sl; } } while (0) 76 76 77 77 int roar_server_info_to_mes(struct roar_message * mes, struct roar_server_info * info) { … … 144 144 char ** tptr; 145 145 146 ROAR_DBG("roar_server_info(mes=%p{.datalen=%llu) = ?", mes, (long long unsigned int)mes->datalen); 147 146 148 if ( mes == NULL ) 147 149 return NULL; 148 150 149 151 memset(iebuf, 0, sizeof(iebuf)); 152 153 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 150 154 151 155 // some basic texts like version: … … 153 157 return NULL; 154 158 159 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 160 155 161 if ( mes->data[0] != 0 ) /* version */ 156 162 return NULL; 157 163 164 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 165 158 166 if ( mes->data[1] != 0 ) /* reserved */ 159 167 return NULL; 160 168 169 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 170 161 171 d16 = (uint16_t*)mes->data; 162 172 163 173 idx = ROAR_NET2HOST16(d16[1]); 174 175 ROAR_DBG("roar_server_info(mes=%p): idx=%i", mes, idx); 164 176 165 177 // return error if our index buffer is too short. … … 167 179 return NULL; 168 180 181 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 182 183 ROAR_DBG("roar_server_info(mes=%p): needlen=%llu", mes, (long long unsigned int)needlen); 184 169 185 needlen += 4*idx; 170 186 … … 173 189 return NULL; 174 190 191 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 192 175 193 d16 = (uint16_t*)mes->data; 176 194 dptr = &(d16[2]); 177 195 178 196 textpart = mes->data + (4 + 4*idx); 197 198 ROAR_DBG("roar_server_info(mes=%p): needlen=%llu", mes, (long long unsigned int)needlen); 179 199 180 200 for (i = 0; i < idx; i++) { … … 184 204 needlen += iebuf[i].len; 185 205 textpart += iebuf[i].len; 186 } 206 dptr += 2; 207 ROAR_DBG("roar_server_info(mes=%p): iebuf[i]={.len=%llu,...}", mes, (long long unsigned int)iebuf[i].len); 208 } 209 210 ROAR_DBG("roar_server_info(mes=%p): needlen=%llu", mes, (long long unsigned int)needlen); 187 211 188 212 // recheck if we have all the data... … … 190 214 return NULL; 191 215 216 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 217 192 218 // alloc the needed space. this can be reduced in future to the actual needed value. 193 219 ret = roar_mm_malloc(2*sizeof(struct roar_server_info) + mes->datalen); … … 195 221 if ( ret == NULL ) 196 222 return NULL; 223 224 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 197 225 198 226 // for the size see the alloc call above. … … 236 264 } 237 265 266 ROAR_DBG("roar_server_info(mes=%p) = %p", mes, ret); 267 238 268 return ret; 239 269 }
Note: See TracChangeset
for help on using the changeset viewer.