Wrote a simple FIFO queue class
authorAlexander Strange <astrange@ithinksw.com>
Fri, 28 Feb 2003 01:35:25 +0000 (01:35 +0000)
committerAlexander Strange <astrange@ithinksw.com>
Fri, 28 Feb 2003 01:35:25 +0000 (01:35 +0000)
ITAppleEventCenter.h
ITAppleEventCenter.m
ITByteStream.h [new file with mode: 0755]
ITByteStream.m [new file with mode: 0755]
ITInetSocket.h
ITInetSocket.m

index 48327a9..f2eae2a 100755 (executable)
@@ -33,9 +33,7 @@
 - (void)sendAEWithEventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn;
 
 - (NSString*)sendAEWithSendString:(NSString*)nssendString eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn;
-- (NSString*)sendAEWithSendString:(NSString*)nssendString eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn fixForAECrappiness:(long)fix;
 - (long)sendAEWithSendStringForNumber:(NSString*)string eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn;
-- (long)sendAEWithSendStringForNumber:(NSString*)string eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn fixForAECrappiness:(long)fix;
 - (AEArrayDataPointer)sendAEWithSendStringForArray:(NSString*)string eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn;
 
 - (void)printCarbonDesc:(AEDesc*)desc;
index 562dbc7..2466e43 100755 (executable)
@@ -613,171 +613,4 @@ return result;
 
     return result;
 }
-- (long)sendAEWithSendStringForNumber:(NSString*)string eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn fixForAECrappiness:(long)fix
-{
-    //Add error checking...
-    AEEventClass eClass = *((unsigned long*)[eventClass UTF8String]);
-    AEEventID    eID    = *((unsigned long*)[eventID UTF8String]);
-
-    const char *sendString = [string UTF8String];
-    SInt32 result = 0;
-
-    AppleEvent sendEvent, replyEvent;
-
-    DescType resultType;
-    Size resultSize, charResultSize;
-
-    AEBuildError buildError;
-    OSStatus err;
-    OSErr err2, err3;
-    /*
-        if ((GetProcessPID(&psn, &pid) == noErr) && (pid == 0)) {
-            NSLog(@"Error getting PID of application! Exiting.");
-            return nil;
-        }
-        */
-    //NSLog(@"_sendString: %s", sendString);
-
-    err = AEBuildAppleEvent(eClass, eID, typeProcessSerialNumber,(ProcessSerialNumber*)&psn, sizeof(ProcessSerialNumber), kAutoGenerateReturnID, 0, &sendEvent, &buildError, sendString);
-[self printCarbonDesc:&sendEvent];
-       //now AEBuildAppleEvent has inserted a bogus integer in there for no reason, so we fix it ourselves.
-       { //this sucks
-//hey, i'm coding this in pico, sccrew indention
-char *buf;
-Size s,i;
-s = AESizeOfFlattenedDesc(&sendEvent);
-buf = malloc(s);
-AEFlattenDesc(&sendEvent,buf,s,NULL);  
-AEDisposeDesc(&sendEvent);
-for (i=0;i<s;i++)
-{
-long *lbuf = &(buf[i]);
-if (s-i <= 8) break; //is there enough room left?
-if (*lbuf == 'long' || *lbuf=='magn')
-{
-lbuf = &(buf[i+4]);
-*lbuf = fix;
-}
-}
-//sendEvent = NULL;
-AEUnflattenDesc(buf,&sendEvent);
-free(buf);
-}
-
-
-    [self printCarbonDesc:&sendEvent];
-
-    if (err) {
-        NSLog(@"%d:%d at \"%@\"",(int)buildError.fError,buildError.fErrorPos,[string substringToIndex:buildError.fErrorPos]);
-    }
-
-    err = AESend(&sendEvent, &replyEvent, kAEWaitReply, kAENormalPriority, kNoTimeOut, idleUPP, NULL);
-
-    [self printCarbonDesc:&replyEvent];
-
-    if (err) {
-        NSLog(@"Send Error: %i",err);
-    } else {
-        err2 = AESizeOfParam(&replyEvent, keyDirectObject, &resultType, &resultSize);
-
-        if (err2) {
-            NSLog(@"Error After AESizeOfParam: %i", err2);
-        } else {
-            err3 = AEGetParamPtr(&replyEvent, keyDirectObject, resultType, NULL, &result, resultSize, &charResultSize);
-
-            if (err3) {
-                NSLog(@"Error After AEGetParamPtr: %i", err3);
-            }
-        }
-    }
-
-
-AEDisposeDesc(&sendEvent);
-AEDisposeDesc(&replyEvent);
-NSLog(@"waffles say %d",result);
-return result;
-}
-
-- (NSString*)sendAEWithSendString:(NSString*)nssendString eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn fixForAECrappiness:(long)fix
-{
-    //Add error checking...
-    AEEventClass eClass = *((unsigned long*)[eventClass UTF8String]);
-    AEEventID    eID    = *((unsigned long*)[eventID UTF8String]);
-
-    const char *sendString = [nssendString UTF8String];
-    NSString  *_finalString = nil;
-
-    AppleEvent sendEvent, replyEvent;
-
-    DescType resultType;
-    Size resultSize, charResultSize;
-
-    AEBuildError buildError;
-    OSStatus err;
-    OSErr err2, err3;
-    /*
-        if ((GetProcessPID(&psn, &pid) == noErr) && (pid == 0)) {
-            NSLog(@"Error getting PID of application! Exiting.");
-            return nil;
-        }
-        */
-    //NSLog(@"_sendString: %s", sendString);
-
-    err = AEBuildAppleEvent(eClass, eID, typeProcessSerialNumber,(ProcessSerialNumber*)&psn, sizeof(ProcessSerialNumber), kAutoGenerateReturnID, 0, &sendEvent, &buildError, sendString);
-[self printCarbonDesc:&sendEvent];
-        //now AEBuildAppleEvent has inserted a bogus integer in there for no reason, so we fix it ourselves.
-{ //this sucks
-//hey, i'm coding this in pico, sccrew indention
-Size s;
-AEDesc dirObj;
-long tmp;
-AEKeyword a;
-AESizeOfParam(&sendEvent,'from',&a,&s);
-//AEDeleteParam(&sendEvent,'seld');
-//AEPutParamPtr(&sendEvent,'seld','long',&fix,sizeof(fix));
-AEGetParamDesc(&sendEvent,'from',a,&dirObj);
-AEGetParamPtr(&dirObj,'seld','long',&a,&tmp,4,&s);
-{
-char *x = (char*)&a;
-       NSLog(@"the seld: %lu of type %c%c%c%c len %lu",tmp,x[0],x[1],x[2],x[3],s);
-}
-AEDisposeDesc(&dirObj);
-}
-    [self printCarbonDesc:&sendEvent];
-
-    if (err) {
-        NSLog(@"%d:%d at \"%@\"",(int)buildError.fError,buildError.fErrorPos,[nssendString substringToIndex:buildError.fErrorPos]);
-    }
-
-    err = AESend(&sendEvent, &replyEvent, kAEWaitReply, kAENormalPriority, kNoTimeOut, idleUPP, NULL);
-
-    [self printCarbonDesc:&replyEvent];
-
-    if (err) {
-        NSLog(@"Send Error: %i",err);
-    } else {
-        unichar *result = 0;
-
-        err2 = AESizeOfParam(&replyEvent, keyDirectObject, &resultType, &resultSize);
-        result = malloc(resultSize);
-
-        if (err2) {
-            NSLog(@"Error After AESizeOfParam: %i", err2);
-        } else {
-            err3 = AEGetParamPtr(&replyEvent, keyDirectObject, resultType, NULL, result, resultSize, &charResultSize);
-
-            if (err3) {
-                NSLog(@"Error After AEGetParamPtr: %i", err3);
-            } else {
-                _finalString = [NSString stringWithCharacters:result length:charResultSize/sizeof(unichar)];
-            }
-        }
-        free(result);
-    }
-
-    AEDisposeDesc(&sendEvent);
-    AEDisposeDesc(&replyEvent);
-
-    return _finalString;
-}
-@end
+@end
\ No newline at end of file
diff --git a/ITByteStream.h b/ITByteStream.h
new file mode 100755 (executable)
index 0000000..265b7a6
--- /dev/null
@@ -0,0 +1,22 @@
+//
+//  ITByteStream.h
+//  ITFoundation
+//
+//  Created by Alexander Strange on Thu Feb 27 2003.
+//  Copyright (c) 2003 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/*! @class ITByteStream
+ *  @abstract A FIFO bytestream
+ */
+
+@interface ITByteStream : NSObject {
+    NSMutableData *data;
+}
+-(id) initWithStream:(ITByteStream*)stream;
+-(int) availableDataLength;
+-(NSData*) readDataOfLength:(int)length;
+-(void) writeData:(NSData*)data;
+@end
diff --git a/ITByteStream.m b/ITByteStream.m
new file mode 100755 (executable)
index 0000000..301d851
--- /dev/null
@@ -0,0 +1,62 @@
+//
+//  ITByteStream.h
+//  ITFoundation
+//
+//  Created by Alexander Strange on Thu Feb 27 2003.
+//  Copyright (c) 2003 __MyCompanyName__. All rights reserved.
+//
+
+#import "ITByteStream.h"
+
+// TODO: Add NSCopying/NSCoding support
+
+@implementation ITByteStream
+-(id) init
+{
+    if (self == [super init])
+          {
+          data = [[NSMutableData alloc] init];
+          }
+    return self;
+}
+
+-(id) initWithStream:(ITByteStream*)stream
+{
+    if (self == [super init])
+          {
+          data = [stream->data copy];
+          }
+    return 0;
+}
+
+-(void) dealloc
+{
+    [data release];
+    [super dealloc];
+}
+
+-(int) availableDataLength
+{
+    return [data length];
+}
+
+-(NSData*) readDataOfLength:(int)length
+{
+    NSData *ret, *tmp;
+    NSRange range = {0, length};
+    ret = [data subdataWithRange:range];
+#if MAC_OS_X_VERSION_10_2 <= MAC_OS_X_VERSION_MAX_ALLOWED
+    [data replaceBytesInRange:range withBytes:nil length:0]; // this should delete off the end. should test.
+#else
+    range = {length, [data length]};
+    tmp = [data subdataWithRange:range];
+    [data setData:tmp]; // maybe i should add a lock to this? it would be bad if someone was writing when it was reading...
+#endif
+    return ret;
+}
+
+-(void) writeData:(NSData*)_data
+{
+    [data appendData:_data];
+}
+@end
index bcf30f5..aad407f 100755 (executable)
@@ -30,7 +30,7 @@ typedef enum {
 
 @protocol ITInetSocketOwner
 - (void) dataRecieved:(in NSData*)data;
-- (void) errorOccured:(int)err during:(ITInetSocketState)state;
+- (void) errorOccured:(ITInetSocketError)err during:(ITInetSocketState)state;
 - (void) finishedConnecting;
 @end
 
@@ -43,11 +43,9 @@ typedef enum {
     NSData *writeBuffer;
     ITInetSocketState state;
 }
-// Init
 -(id) initWithFD:(int)fd delegate:(id)d;
 -(id) initWithDelegate:(id)d;
 
 -(void) connectToHost:(NSString*)host onPort:(short)port;
 -(ITInetSocketState) state;
-
 @end
index 7902782..09f94f5 100755 (executable)
     "Protocol = %x\n"
     "Canonname = %s\n"
     "Sockaddr = \n"
-    "\{\n"
+    "{\n"
     "\tLength = %x\n"
     "\tFamily = %x\n"
     "\tPort = %d\n"
     "\tFlowinfo = %x\n"
     "\tAddr = {%#lx,%#lx,%#lx,%#lx}\n"
     "\tScope = %x\n"
-    "\}\n"
+    "}\n"
     "Next = ";
     NSString *nsfmt = [NSString stringWithCString:cfmt];
     NSMutableString *buf = [[[NSMutableString alloc] init] autorelease];