Changeset 533

Show
Ignore:
Timestamp:
04/14/04 13:00:41 (5 years ago)
Author:
jajcus
Message:

- ported to glib2

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/stream.c

    r502 r533  
    1 /* $Id: stream.c,v 1.23 2004/03/17 22:40:02 jajcus Exp $ */ 
     1/* $Id: stream.c,v 1.24 2004/04/14 11:00:41 jajcus Exp $ */ 
    22 
    33/* 
     
    8282        } 
    8383        s->ioch=g_io_channel_unix_new(fd); 
     84        g_io_channel_set_encoding(s->ioch,NULL,NULL); 
     85        g_io_channel_set_buffered(s->ioch,0); 
    8486        s->sa.sin_family=AF_INET; 
    8587        s->sa.sin_port=htons(port); 
     
    195197int stream_io_read(GIOChannel *source,GIOCondition condition,gpointer data){ 
    196198Stream *s; 
    197 GIOError err; 
    198 guint br; 
     199GIOStatus st; 
     200GError *error=NULL; 
     201gsize br; 
    199202 
    200203        s=(Stream *)data; 
     
    208211                s->read_buf_len=1024; 
    209212        } 
    210         err=g_io_channel_read(source,s->read_buf,s->read_buf_len,&br); 
    211         if (err==G_IO_ERROR_INVAL || br<1){ 
     213        st=g_io_channel_read_chars(source,s->read_buf,s->read_buf_len,&br,&error); 
     214        if (st!=G_IO_STATUS_NORMAL){ 
     215                g_warning("read: %i %s",st,error?error->message:"unknown"); 
     216                if (error) g_error_free(error); 
     217                error=NULL; 
    212218                s->read_watch=0; 
    213219                s->xs->f(XSTREAM_CLOSE,NULL,s); 
    214220                return FALSE; 
    215221        } 
    216         if (err==G_IO_ERROR_AGAIN) return TRUE; 
    217         if (err!=G_IO_ERROR_NONE){ 
    218                 g_warning("read: %s",g_strerror(errno)); 
    219                 return TRUE; 
    220         } 
     222        if (error) g_error_free(error); 
     223        error=NULL; 
     224        if (st==G_IO_STATUS_AGAIN) return TRUE; 
    221225        s->read_buf[br]=0; 
    222226        debug("IN: %s",s->read_buf); 
     
    228232Stream *s; 
    229233char * str; 
    230 GIOError err; 
    231 guint br; 
     234GIOStatus st; 
     235GError *error=NULL; 
     236gsize br; 
    232237 
    233238        s=(Stream *)data; 
     
    235240 
    236241        if (s->write_buf && s->write_pos>=0 && s->write_len>=0){ 
    237                 err=g_io_channel_write(source, 
     242                st=g_io_channel_write_chars(source, 
    238243                                        s->write_buf+s->write_pos, 
    239244                                        s->write_len-s->write_pos, 
    240                                         &br); 
    241                 if (err==G_IO_ERROR_INVAL){ 
     245                                        &br, 
     246                                        &error); 
     247                if (st==G_IO_STATUS_ERROR){ 
     248                        g_warning("write error: %s",error?error->message:"unknwown"); 
    242249                        s->write_watch=0; 
    243250                        s->xs->f(XSTREAM_CLOSE,NULL,s); 
     251                        if (error) g_error_free(error); 
    244252                        return FALSE; 
    245253                } 
    246                 if (err==G_IO_ERROR_AGAIN) return TRUE; 
    247                 if (err!=G_IO_ERROR_NONE){ 
    248                         g_warning("write: %s",g_strerror(errno)); 
     254                if (st==G_IO_STATUS_AGAIN) return TRUE; 
     255                if (st!=G_IO_STATUS_NORMAL){ 
     256                        g_warning("write status: %i (%s)",st,error?error->message:"unknown"); 
     257                        if (error) g_error_free(error); 
    249258                        return TRUE; 
    250259                } 
     260                if (error) g_error_free(error); 
     261                error=NULL; 
    251262                str=g_new(char,br+1); 
    252263                g_assert(str!=NULL); 
     
    256267                g_free(str); 
    257268                s->write_pos+=br; 
     269                debug("write_pos: %i, write_len: %i, br: %i\n",s->write_pos,s->write_len,(int)br); 
    258270                if (s->write_pos==s->write_len){ 
    259271                        s->write_watch=0; 
     
    268280int stream_write_bytes(Stream *s,const char *buf,int l){ 
    269281time_t stream_flush_timeout; 
     282GIOStatus st; 
     283GError *error=NULL; 
    270284 
    271285        if (!l) return 0; 
     
    285299                if (!s->write_len && l>MAX_WRITE_BUF){ 
    286300                        int pos=0; 
    287                         int written,err
     301                        gsize written
    288302                        char *str; 
    289303                        debug("Flushing data that don't fit into the write buffer."); 
    290304                        while(pos<l){ 
    291                                 err=g_io_channel_write(s->ioch, 
     305                                st=g_io_channel_write_chars(s->ioch, 
    292306                                                (gchar *)buf+pos, 
    293307                                                l-pos, 
    294                                                 &written); 
    295                                 if (err!=G_IO_ERROR_AGAIN && err!=G_IO_ERROR_NONE){ 
    296                                         g_warning("write: %s",g_strerror(errno)); 
     308                                                &written, 
     309                                                &error); 
     310                                if (st!=G_IO_STATUS_AGAIN && st!=G_IO_STATUS_NORMAL){ 
     311                                        g_warning("write: %i: %s",st,error?error->message:"unknown"); 
     312                                        if (error) g_error_free(error); 
    297313                                        return -2; 
    298314                                } 
     315                                if (error) g_error_free(error); 
     316                                error=NULL; 
    299317                                str=g_new(char,written+1); 
    300318                                g_assert(str!=NULL); 
     
    371389                char goodbye[]="</stream:stream>"; 
    372390                guint i,l; 
    373                 GIOError err; 
    374                 guint br; 
     391                gsize br; 
     392                GIOStatus st; 
     393                GError *error=NULL; 
    375394 
    376395                i=0; 
    377396                l=sizeof(goodbye); 
    378397                do{ 
    379                         err=g_io_channel_write(s->ioch,goodbye+i,l,&br); 
     398                        st=g_io_channel_write_chars(s->ioch,goodbye+i,l,&br,&error); 
     399                        if (error) g_error_free(error); 
     400                        error=NULL; 
    380401                        l-=br; 
    381402                        i+=br; 
    382                 }while(err==G_IO_ERROR_AGAIN||(err=G_IO_ERROR_NONE && l>0)); 
     403                }while(st==G_IO_STATUS_AGAIN||(st=G_IO_STATUS_NORMAL && l>0)); 
    383404                s->closing=1; 
    384405        }