Exemplo n.º 1
0
 public virtual void reset()
 {
     isChunked     = false;
     headers       = null;
     bodyData      = null;
     contentLength = 0;
     dataCounter   = 0;
     endOfResponse = false;
     aborted       = false;
 }
Exemplo n.º 2
0
 public void onDataReceived(byte[] buf, long size)
 {
     if (size > 0)
     {
         receivedData = cape.Buffer.append(receivedData, buf, size);
     }
     if (headers == null)
     {
         if (hasEndOfHeaders(receivedData, cape.Buffer.getSize(receivedData)))
         {
             headers = parseResponseHeader(receivedData);
         }
     }
     if (isChunked)
     {
         while (true)
         {
             var r = getChunk();
             if (r != null)
             {
                 if (!r.completed)
                 {
                     break;
                 }
                 var sz = cape.Buffer.getSize(r.data);
                 dataCounter += (int)sz;
                 onBodyDataReceived(r.data, sz);
             }
             else
             {
                 onEndOfResponse();
                 break;
             }
             if (!(receivedData != null))
             {
                 break;
             }
         }
     }
     else if (contentLength > 0)
     {
         var rsz = cape.Buffer.getSize(receivedData);
         if (rsz > 0)
         {
             if (contentLength <= 0 || dataCounter + rsz <= contentLength)
             {
                 var v = receivedData;
                 receivedData = null;
                 dataCounter += (int)rsz;
                 onBodyDataReceived(v, rsz);
             }
             else
             {
                 var vsz = contentLength - dataCounter;
                 var v1  = cape.Buffer.getSubBuffer(receivedData, (long)0, (long)vsz);
                 receivedData = cape.Buffer.getSubBuffer(receivedData, (long)vsz, rsz - vsz);
                 dataCounter += vsz;
                 onBodyDataReceived(v1, (long)vsz);
             }
         }
         if (dataCounter >= contentLength)
         {
             onEndOfResponse();
         }
     }
     else
     {
         onEndOfResponse();
     }
 }
Exemplo n.º 3
0
            private capex.net.WSSocketGeneric.HTTPClientResponse parseResponseHeader(byte[] buf)
            {
                var i = 0;
                var p = (byte)'0';

                capex.net.WSSocketGeneric.HTTPClientResponse v = null;
                var first     = true;
                var isChunked = false;

                while (true)
                {
                    var sb = new cape.StringBuilder();
                    while ((p = cape.Buffer.getByte(buf, (long)i)) != 0)
                    {
                        if (p == '\r')
                        {
                            ;
                        }
                        else if (p == '\n')
                        {
                            i++;
                            break;
                        }
                        else
                        {
                            sb.append((char)p);
                        }
                        i++;
                    }
                    var t = sb.toString();
                    if (cape.String.isEmpty(t))
                    {
                        break;
                    }
                    if (first)
                    {
                        var comps = cape.String.split(t, ' ', 3);
                        v = new capex.net.WSSocketGeneric.HTTPClientResponse();
                        v.setHttpVersion(cape.Vector.get(comps, 0));
                        v.setHttpStatus(cape.Vector.get(comps, 1));
                        v.setHttpStatusDescription(cape.Vector.get(comps, 2));
                    }
                    else
                    {
                        var comps1 = cape.String.split(t, ':', 2);
                        var key    = cape.Vector.get(comps1, 0);
                        if (cape.String.isEmpty(key) == false)
                        {
                            var val = cape.String.strip(cape.Vector.get(comps1, 1));
                            v.addHeader(key, val);
                            if (isChunked == false && cape.String.equalsIgnoreCase(key, "transfer-encoding"))
                            {
                                if (object.Equals(val, "chunked"))
                                {
                                    isChunked = true;
                                }
                            }
                            else if (contentLength < 1 && cape.String.equalsIgnoreCase(key, "content-length"))
                            {
                                contentLength = cape.String.toInteger(val);
                            }
                        }
                    }
                    first = false;
                }
                var l = (long)(cape.Buffer.getSize(buf) - i);

                if (l > 0)
                {
                    receivedData = cape.Buffer.getSubBuffer(buf, (long)i, l);
                }
                else
                {
                    receivedData = null;
                }
                this.isChunked = isChunked;
                return(v);
            }