Changeset 1322:3bdf57f6d5cb in roaraudio for libroar/vio_bio.c


Ignore:
Timestamp:
03/21/09 17:05:17 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added support to open an OpenSSL BIO as VIO object

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/vio_bio.c

    r1321 r1322  
    3535#include "libroar.h" 
    3636 
     37int     roar_vio_open_bio      (struct roar_vio_calls * calls, BIO * bio) { 
     38#ifdef ROAR_HAVE_LIBSSL 
     39 if ( calls == NULL || bio == NULL ) 
     40  return -1; 
     41 
     42 memset(calls, 0, sizeof(struct roar_vio_calls)); 
     43 
     44 calls->read     = roar_vio_bio_read; 
     45 calls->write    = roar_vio_bio_write; 
     46 calls->lseek    = roar_vio_bio_lseek; 
     47 calls->nonblock = roar_vio_bio_nonblock; 
     48 calls->sync     = roar_vio_bio_sync; 
     49 calls->close    = roar_vio_bio_close; 
     50 
     51 calls->inst     = (void*) bio; 
     52 
     53 return 0; 
     54#else 
     55 return -1; 
     56#endif 
     57} 
     58 
     59BIO *   roar_vio_to_bio        (struct roar_vio_calls * calls) { 
     60 return NULL; 
     61} 
     62 
     63#ifdef ROAR_HAVE_LIBSSL 
     64ssize_t roar_vio_bio_read    (struct roar_vio_calls * vio, void *buf, size_t count) { 
     65 BIO * bio = (BIO*)(vio->inst); 
     66 int r; 
     67 
     68 if ( (r = BIO_read(bio, buf, count)) == -2 ) 
     69  return -1; 
     70 
     71 return r; 
     72} 
     73ssize_t roar_vio_bio_write   (struct roar_vio_calls * vio, void *buf, size_t count) { 
     74 BIO * bio = (BIO*)(vio->inst); 
     75 int r; 
     76 
     77 if ( (r = BIO_write(bio, buf, count)) == -2 ) 
     78  return -1; 
     79 
     80 return r; 
     81} 
     82 
     83off_t   roar_vio_bio_lseek   (struct roar_vio_calls * vio, off_t offset, int whence) { 
     84 return -1; 
     85} 
     86 
     87int     roar_vio_bio_nonblock(struct roar_vio_calls * vio, int state) { 
     88 return -1; 
     89} 
     90int     roar_vio_bio_sync    (struct roar_vio_calls * vio) { 
     91 return -1; 
     92} 
     93 
     94int     roar_vio_bio_close   (struct roar_vio_calls * vio) { 
     95 BIO * bio = (BIO*)(vio->inst); 
     96 
     97 // TODO: check the return values 
     98 
     99 BIO_flush(bio); 
     100 BIO_free_all(bio); 
     101 
     102 return 0; 
     103} 
     104#endif 
     105 
    37106//ll 
Note: See TracChangeset for help on using the changeset viewer.