BLIP/BLIP_Internal.h
author Jens Alfke <jens@mooseyard.com>
Wed Jun 11 14:58:38 2008 -0700 (2008-06-11)
changeset 16 6f608b552b77
parent 0 9d67172bb323
child 18 3be241de1630
permissions -rw-r--r--
* Added a timeout property to TCPConnection. Set it before calling -open, if you want a shorter timeout than the default.
* Made the utility function BLIPMakeError public.
     1 //
     2 //  BLIP_Internal.h
     3 //  MYNetwork
     4 //
     5 //  Created by Jens Alfke on 5/10/08.
     6 //  Copyright 2008 Jens Alfke. All rights reserved.
     7 //
     8 
     9 #import "BLIPConnection.h"
    10 #import "BLIPRequest.h"
    11 #import "BLIPProperties.h"
    12 @class BLIPWriter;
    13 
    14 
    15 /* Private declarations and APIs for BLIP implementation. Not for use by clients! */
    16 
    17 
    18 /* BLIP message types; encoded in each frame's header. */
    19 typedef enum {
    20     kBLIP_MSG,                      // initiating message
    21     kBLIP_RPY,                      // response to a MSG
    22     kBLIP_ERR                       // error response to a MSG
    23 } BLIPMessageType;
    24 
    25 /* Flag bits in a BLIP frame header */
    26 enum {
    27     kBLIP_TypeMask  = 0x000F,       // bits reserved for storing message type
    28     kBLIP_Compressed= 0x0010,       // data is gzipped
    29     kBLIP_Urgent    = 0x0020,       // please send sooner/faster
    30     kBLIP_NoReply   = 0x0040,       // no RPY needed
    31     kBLIP_MoreComing= 0x0080,       // More frames coming (Applies only to individual frame)
    32 };
    33 typedef UInt16 BLIPMessageFlags;
    34 
    35 
    36 /** Header of a BLIP frame as sent across the wire. All fields are big-endian. */
    37 typedef struct {
    38     UInt32           magic;         // magic number (kBLIPFrameHeaderMagicNumber)
    39     UInt32           number;        // serial number of MSG
    40     BLIPMessageFlags flags;         // encodes frame type, "more" flag, and other delivery options
    41     UInt16           size;          // total size of frame, _including_ this header
    42 } BLIPFrameHeader;
    43 
    44 #define kBLIPFrameHeaderMagicNumber 0x9B34F205
    45 
    46 
    47 @interface BLIPConnection ()
    48 - (void) _dispatchRequest: (BLIPRequest*)request;
    49 - (void) _dispatchResponse: (BLIPResponse*)response;
    50 @end
    51 
    52 
    53 @interface BLIPMessage ()
    54 @property BOOL sent, propertiesAvailable, complete;
    55 - (void) _setFlag: (BLIPMessageFlags)flag value: (BOOL)value;
    56 - (void) _encode;
    57 @end
    58 
    59 
    60 @interface BLIPMessage ()
    61 - (id) _initWithConnection: (BLIPConnection*)connection
    62                     isMine: (BOOL)isMine
    63                      flags: (BLIPMessageFlags)flags
    64                     number: (UInt32)msgNo
    65                       body: (NSData*)body;
    66 - (BOOL) _writeFrameTo: (BLIPWriter*)writer maxSize: (UInt16)maxSize;
    67 @property (readonly) SInt32 _bytesWritten;
    68 - (void) _assignedNumber: (UInt32)number;
    69 - (BOOL) _receivedFrameWithHeader: (const BLIPFrameHeader*)header body: (NSData*)body;
    70 - (void) _connectionClosed;
    71 @end
    72 
    73 
    74 @interface BLIPRequest ()
    75 - (id) _initWithConnection: (BLIPConnection*)connection
    76                       body: (NSData*)body 
    77                 properties: (NSDictionary*)properties;
    78 @end
    79 
    80 
    81 @interface BLIPResponse ()
    82 - (id) _initWithRequest: (BLIPRequest*)request;
    83 @end