Changeset 6020:11e65673ee8c in roaraudio


Ignore:
Timestamp:
07/13/14 17:57:29 (10 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

a little cleanup and some preparing for v1 CON_STREAM messages

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/req.c

    r5961 r6020  
    457457 char   host[80] = {0}; 
    458458 int    port = 0; 
    459  int    type; 
     459 int    type = ROAR_SOCKET_TYPE_NONE; 
    460460 int    fh; 
    461461 int    len; 
    462462 
    463  if ( mes->datalen < 4 ) 
    464   return -1; 
    465  
    466  if ( *(mes->data) != 0 ) 
    467   return -1; 
    468  
    469  if ( mes->datalen > 80 ) // we do not support long messages here 
    470   return -1; 
    471  
    472  type = (unsigned)mes->data[1]; 
    473  port = ROAR_NET2HOST16(((uint16_t*)mes->data)[1]); 
    474  
    475  len = mes->datalen - 4; 
    476  
    477  strncpy(host, &(mes->data[4]), len); 
    478  host[len] = 0; 
    479  
    480  if ( type > ROAR_SOCKET_TYPE_MAX ) 
    481   return -1; 
    482  
    483  if ( type == ROAR_SOCKET_TYPE_FILE ) // disabled because of security resons 
    484   return -1; 
    485  
    486  if ( type == ROAR_SOCKET_TYPE_FORK ) // why should we connect to ourself? 
    487   return -1; 
     463 if ( mes->datalen < 4 ) { 
     464  roar_err_set(ROAR_ERROR_BADMSG); 
     465  return -1; 
     466 } 
     467 
     468 if ( mes->datalen > 80 ) { // we do not support long messages here 
     469  roar_err_set(ROAR_ERROR_MSGSIZE); 
     470  return -1; 
     471 } 
     472 
     473 switch (*(mes->data)) { 
     474  case 0: // version 0 packet: 
     475    type = (unsigned)mes->data[1]; 
     476    port = ROAR_NET2HOST16(((uint16_t*)mes->data)[1]); 
     477 
     478    len = mes->datalen - 4; 
     479 
     480    strncpy(host, &(mes->data[4]), len); 
     481    host[len] = 0; 
     482   break; 
     483  default: 
     484    roar_err_set(ROAR_ERROR_NSVERSION); 
     485    return -1; 
     486   break; 
     487 } 
     488 
     489 if ( type > ROAR_SOCKET_TYPE_MAX ) { 
     490  roar_err_set(ROAR_ERROR_NOENT); 
     491  return -1; 
     492 } 
     493 
     494 switch (type) { 
     495  case ROAR_SOCKET_TYPE_NONE: 
     496  case ROAR_SOCKET_TYPE_FORK: 
     497  case ROAR_SOCKET_TYPE_GENSTR: 
     498    roar_err_set(ROAR_ERROR_INVAL); 
     499    return -1; 
     500   break; 
     501  case ROAR_SOCKET_TYPE_FILE: 
     502    roar_err_set(ROAR_ERROR_PERM); 
     503    return -1; 
     504   break; 
     505  default: 
     506    // pass. 
     507   break; 
     508 } 
    488509 
    489510 ROAR_DBG("req_on_con_stream(*): CONNECT(type=%i, host='%s', port=%i)", type, host, port); 
Note: See TracChangeset for help on using the changeset viewer.