BLIP/BLIPMessage.h
changeset 1 8267d5c429c4
child 2 9fdd8dba529c
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/BLIP/BLIPMessage.h	Sat May 24 13:26:02 2008 -0700
     1.3 @@ -0,0 +1,109 @@
     1.4 +//
     1.5 +//  BLIPMessage.h
     1.6 +//  MYNetwork
     1.7 +//
     1.8 +//  Created by Jens Alfke on 5/10/08.
     1.9 +//  Copyright 2008 Jens Alfke. All rights reserved.
    1.10 +//
    1.11 +
    1.12 +#import <Foundation/Foundation.h>
    1.13 +@class BLIPConnection, BLIPProperties, BLIPMutableProperties;
    1.14 +
    1.15 +
    1.16 +/** NSError domain and codes for BLIP */
    1.17 +extern NSString* const BLIPErrorDomain;
    1.18 +enum {
    1.19 +    kBLIPError_BadData = 1,
    1.20 +    kBLIPError_BadFrame,
    1.21 +    kBLIPError_Disconnected,
    1.22 +    kBLIPError_PeerNotAllowed,
    1.23 +    
    1.24 +    kBLIPError_Misc = 99,
    1.25 +    
    1.26 +    // errors returned in responses:
    1.27 +    kBLIPError_BadRequest = 400,
    1.28 +    kBLIPError_Forbidden = 403,
    1.29 +    kBLIPError_NotFound = 404,
    1.30 +    kBLIPError_BadRange = 416,
    1.31 +    
    1.32 +    kBLIPError_HandlerFailed = 501,
    1.33 +    kBLIPError_Unspecified = 599            // peer didn't send any detailed error info
    1.34 +};
    1.35 +
    1.36 +
    1.37 +/** Abstract superclass for both requests and responses. */
    1.38 +@interface BLIPMessage : NSObject 
    1.39 +{
    1.40 +    BLIPConnection *_connection;
    1.41 +    UInt16 _flags;
    1.42 +    UInt32 _number;
    1.43 +    BLIPProperties *_properties;
    1.44 +    NSData *_body;
    1.45 +    NSMutableData *_encodedBody;
    1.46 +    NSMutableData *_mutableBody;
    1.47 +    BOOL _isMine, _isMutable, _sent, _propertiesAvailable, _complete;
    1.48 +    SInt32 _bytesWritten;
    1.49 +};
    1.50 +
    1.51 +/** The BLIPConnection associated with this message. */
    1.52 +@property (readonly,retain) BLIPConnection *connection;
    1.53 +
    1.54 +/** This message's serial number in its connection.
    1.55 +    A BLIPRequest's number is initially zero, then assigned when it's sent.
    1.56 +    A BLIPResponse is automatically assigned the same number as the request it replies to. */
    1.57 +@property (readonly) UInt32 number;
    1.58 +
    1.59 +/** Is this a message sent by me (as opposed to the peer)? */
    1.60 +@property (readonly) BOOL isMine;
    1.61 +
    1.62 +/** Has this message been sent yet? (Only makes sense when isMe is set.) */
    1.63 +@property (readonly) BOOL sent;
    1.64 +
    1.65 +/** Has enough of the message arrived to read its properies? */
    1.66 +@property (readonly) BOOL propertiesAvailable;
    1.67 +
    1.68 +/** Has the entire message, including the body, arrived? */
    1.69 +@property (readonly) BOOL complete;
    1.70 +
    1.71 +/** Should the message body be compressed using gzip?
    1.72 +    This property can only be set before sending the message. */
    1.73 +@property BOOL compressed;
    1.74 +
    1.75 +/** Should the message be sent ahead of normal-priority messages?
    1.76 +    This property can only be set before sending the message. */
    1.77 +@property BOOL urgent;
    1.78 +
    1.79 +/** Can this message be changed? (Only true for outgoing messages, before you send them.) */
    1.80 +@property (readonly) BOOL isMutable;
    1.81 +
    1.82 +/** The message body, a blob of arbitrary data. */
    1.83 +@property (copy) NSData *body;
    1.84 +
    1.85 +/** Appends data to the body. */
    1.86 +- (void) addToBody: (NSData*)data;
    1.87 +
    1.88 +#pragma mark PROPERTIES:
    1.89 +
    1.90 +/** The message's properties, a dictionary-like object. */
    1.91 +@property (readonly) BLIPProperties* properties;
    1.92 +
    1.93 +/** Mutable version of the message's properties; only available if this mesage is mutable. */
    1.94 +@property (readonly) BLIPMutableProperties* mutableProperties;
    1.95 +
    1.96 +/** The value of the "Content-Type" property, which is by convention the MIME type of the body. */
    1.97 +@property (copy) NSString *contentType;
    1.98 +
    1.99 +/** The value of the "Profile" property, which by convention identifies the purpose of the message. */
   1.100 +@property (copy) NSString *profile;
   1.101 +
   1.102 +/** A shortcut to get the value of a property. */
   1.103 +- (NSString*) valueOfProperty: (NSString*)property;
   1.104 +
   1.105 +/** A shortcut to set the value of a property. A nil value deletes that property. */
   1.106 +- (void) setValue: (NSString*)value ofProperty: (NSString*)property;
   1.107 +
   1.108 +/** Similar to -description, but also shows the properties and their values. */
   1.109 +@property (readonly) NSString* descriptionWithProperties;
   1.110 +
   1.111 +
   1.112 +@end