Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Adds a Sinatra-inspired routing API on top of [CocoaHTTPServer](https://github.c

Supports iOS 4+ and OS X 10.7+

###Changes from trunk:
- RouteRequest has new method: valueForFormField: This method is used to retrieve values from a submitted form.

## Installation

1. Add [CocoaHTTPServer](https://github.com/robbiehanson/CocoaHTTPServer) to your project
Expand Down
2 changes: 1 addition & 1 deletion Source/RouteRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
- (NSString *)method;
- (NSURL *)url;
- (NSData *)body;

- (NSString *)valueForFormField:(NSString*)field;
@end
42 changes: 42 additions & 0 deletions Source/RouteRequest.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
#import "RouteRequest.h"
#import "HTTPMessage.h"

@interface RouteRequest()

@property (strong)NSArray *parameters;

@end

@implementation RouteRequest {
HTTPMessage *message;
}
Expand All @@ -11,6 +17,7 @@ - (id)initWithHTTPMessage:(HTTPMessage *)msg parameters:(NSDictionary *)paramete
if (self = [super init]) {
params = parameters;
message = msg;
[self parseBody];
}
return self;
}
Expand Down Expand Up @@ -44,4 +51,39 @@ - (NSString *)description {
return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
}

- (NSString *)valueForFormField:(NSString*)field {
for (NSDictionary *dict in self.parameters) {
NSString *name = dict[@"name"];
if ([name isEqualToString:field]) {
return dict[@"value"];
}
}

return nil;
}

-(void) parseBody {
NSString *body = [[NSString alloc] initWithData:[self body] encoding:NSASCIIStringEncoding];
if ([[self body] length] == 0) {
return;
}

NSArray *rawParameters = [body componentsSeparatedByString:@"&"];
NSMutableArray *parameters = [NSMutableArray array];
for (NSString* parameter in rawParameters) {
NSArray *parameterParts = [parameter componentsSeparatedByString:@"="];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[@"name"] = parameterParts[0];
dict[@"value"] = [self decodeFromPercentEscapedString:parameterParts[1]];
[parameters addObject:dict];
}

self.parameters = [NSArray arrayWithArray:parameters];
}

- (NSString *)decodeFromPercentEscapedString:(NSString *) encodedSring {
return (__bridge NSString *)
CFURLCreateStringByReplacingPercentEscapesUsingEncoding( NULL, (__bridge CFStringRef)encodedSring, CFSTR(""), kCFStringEncodingUTF8);
}

@end