Changeset 3205:eade78a7d3fc in roaraudio


Ignore:
Timestamp:
01/24/10 04:15:10 (10 years ago)
Author:
phi
Branch:
default
Message:

added all but read support for ssdp

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroareio/ff_ssdp.h

    r3204 r3205  
    5252#define ROAR_FF_SSDP_M_M_SEARCH  2 
    5353 
     54#define ROAR_FF_SSDP_MS_NOTIFY   "NOTIFY" 
     55#define ROAR_FF_SSDP_MS_M_SEARCH "M-SEARCH" 
     56 
    5457#define ROAR_FF_SSDP_A_ALIVE     1 
    5558#define ROAR_FF_SSDP_A_BYEBYE    2 
    5659#define ROAR_FF_SSDP_A_REG       ROAR_FF_SSDP_A_ALIVE 
    5760#define ROAR_FF_SSDP_A_UNREG     ROAR_FF_SSDP_A_BYEBYE 
     61 
     62#define ROAR_FF_SSDP_AS_ALIVE    "ssdp:alive" 
     63#define ROAR_FF_SSDP_AS_BYEBYE   "ssdp:byebye" 
    5864 
    5965#define ROAR_FF_SSDP_HOST_UPNP   "239.255.255.250:1900" 
     
    7278 
    7379void roar_ff_ssdp_init (struct roar_ff_ssdp * c); 
     80void roar_ff_ssdp_free (struct roar_ff_ssdp * c); 
    7481 
    7582int  roar_ff_ssdp_write(struct roar_vio_calls * vio, struct roar_ff_ssdp * c); 
  • libroareio/ff_ssdp.c

    r3204 r3205  
    2525#include "libroareio.h" 
    2626 
     27static char * _sd (char * str) { 
     28 ssize_t len = strlen(str) + 1; 
     29 char * ret = roar_mm_malloc(len); 
     30 
     31 memcpy(ret, str, len); 
     32 
     33 return ret; 
     34} 
     35 
     36void roar_ff_ssdp_init (struct roar_ff_ssdp * c) { 
     37 memset(c, 0, sizeof(struct roar_ff_ssdp)); 
     38 
     39 c->method        = ROAR_FF_SSDP_M_NOTIFY; 
     40 c->server        = _sd("RoarAudio libroareio/ff_ssdp.c"); 
     41 c->max_age       = 1800; 
     42 c->location      = NULL; 
     43 c->nt            = NULL; 
     44 c->usn           = NULL; 
     45 c->usn_nt_suffix = 1; 
     46 c->host          = _sd(ROAR_FF_SSDP_HOST_UPNP); 
     47} 
     48 
     49void roar_ff_ssdp_free (struct roar_ff_ssdp * c) { 
     50 if ( c->server != NULL ) 
     51  roar_mm_free(c->server); 
     52 
     53 if ( c->location != NULL ) 
     54  roar_mm_free(c->location); 
     55 
     56 if ( c->nt != NULL ) 
     57  roar_mm_free(c->nt); 
     58 
     59 if ( c->usn != NULL ) 
     60  roar_mm_free(c->usn); 
     61 
     62 if ( c->host != NULL ) 
     63  roar_mm_free(c->host); 
     64 
     65 memset(c, 0, sizeof(struct roar_ff_ssdp)); 
     66} 
     67 
     68int  roar_ff_ssdp_write(struct roar_vio_calls * vio, struct roar_ff_ssdp * c) { 
     69 char * met; 
     70 char * nts; 
     71 
     72 switch (c->method) { 
     73  case ROAR_FF_SSDP_M_NOTIFY:   met = ROAR_FF_SSDP_MS_NOTIFY;   break; 
     74  case ROAR_FF_SSDP_M_M_SEARCH: met = ROAR_FF_SSDP_MS_M_SEARCH; break; 
     75  default: return -1; 
     76 } 
     77 
     78 switch (c->nst) { 
     79  case ROAR_FF_SSDP_A_ALIVE:  nts = ROAR_FF_SSDP_AS_ALIVE;  break; 
     80  case ROAR_FF_SSDP_A_BYEBYE: nts = ROAR_FF_SSDP_AS_BYEBYE; break; 
     81  default: return -1; 
     82 } 
     83 
     84 roar_vio_printf(vio, "%s * HTTP/1.1\r\n", met); 
     85 roar_vio_printf(vio, "SERVER: %s\r\n", c->server); 
     86 roar_vio_printf(vio, "CACHE-CONTROL: max-age=%i\r\n", c->max_age); 
     87 roar_vio_printf(vio, "LOCATION: %s\r\n", c->location); 
     88 roar_vio_printf(vio, "NTS: %s\r\n", nts); 
     89 roar_vio_printf(vio, "NT: %s\r\n", c->nt); 
     90 
     91 if ( c->usn_nt_suffix ) { 
     92  roar_vio_printf(vio, "USN: %s::%s\r\n", c->usn, c->nt); 
     93 } else { 
     94  roar_vio_printf(vio, "USN: %s\r\n", c->usn); 
     95 } 
     96 
     97 roar_vio_printf(vio, "HOST: %s\r\n", c->host); 
     98 roar_vio_printf(vio, "\r\n"); 
     99 
     100 return 0; 
     101} 
     102int  roar_ff_ssdp_read (struct roar_vio_calls * vio, struct roar_ff_ssdp * c) { 
     103 return -1; 
     104} 
     105 
     106 
    27107//ll 
Note: See TracChangeset for help on using the changeset viewer.