int ffurl_read_complete(URLContext *h, unsigned char *buf, int size) { #define MAX_RETRY (6*60) //10S*6*60=60MIN; int maxretry=MAX_RETRY; int toread=size; int readedlen=0; if (!(h->flags & AVIO_FLAG_READ)) return AVERROR(EIO); while(toread>0 && maxretry-->0){ int ret; ret=retry_transfer_wrapper(h, buf+readedlen, toread, toread, h->prot->url_read); if(ret>0){ toread-=ret; readedlen+=ret; }else if(ret!=AVERROR(EAGAIN)){ return ret;/*error of EOF*/ } if(url_interrupt_cb()) return AVERROR_EXIT; } if((size-toread)!=0) return (size-toread); else return AVERROR(ETIMEDOUT);/*retry too long time,//time out...*/ }
int ffurl_read(URLContext *h, unsigned char *buf, int size) { if (!h) return 0; if (!(h->flags & AVIO_FLAG_READ)) return AVERROR(EIO); return retry_transfer_wrapper(h, buf, size, 1, h->prot->url_read); }
int ffurl_write(URLContext *h, const unsigned char *buf, int size) { if (!(h->flags & AVIO_FLAG_WRITE)) return AVERROR(EIO); /* avoid sending too big packets */ if (h->max_packet_size && size > h->max_packet_size) return AVERROR(EIO); return retry_transfer_wrapper(h, buf, size, size, h->prot->url_write); }
int url_read_complete(URLContext *h, unsigned char *buf, int size) { if (h->flags & URL_WRONLY) return AVERROR(EIO); return retry_transfer_wrapper(h, buf, size, size, h->prot->url_read); }