diff --git a/DDWRT_MonitorAppDelegate.h b/DDWRT_MonitorAppDelegate.h
index f6608a3..8a09ddd 100644
--- a/DDWRT_MonitorAppDelegate.h
+++ b/DDWRT_MonitorAppDelegate.h
@@ -34,7 +34,6 @@
IBOutlet id menuUptime;
IBOutlet id menuLoad;
IBOutlet id menuWanIP;
- IBOutlet id menuConnections;
IBOutlet id menuWanStatus;
IBOutlet id menuWanUptime;
@@ -50,6 +49,12 @@
IBOutlet id menuWanDNSItem2;
IBOutlet id menuWanBandwidthGraph;
+
+ IBOutlet id menuClients;
+ IBOutlet id menuClientsCount;
+ IBOutlet id menuClientsConnections;
+ IBOutlet id menuClientsSeparator;
+
NSUserDefaults *defaults;
// application prefs:
@@ -109,15 +114,14 @@
- (IBAction) refreshWanMenu:(id)sender;
- (void) wanRequestCallback:(NSData *)data;
- (IBAction) refreshClientsMenu:(id)sender;
+- (void) cbClientsRequest:(NSData*)data;
- (void) saveConfig:(id)sender;
- (void) updateThroughput:(NSTimer*)timer;
- (void) throughputCallback:(NSData *)data;
- (void) doUpdateStatus:(NSData *)data;
+- (IBAction) copyParentMenuTitle:(id)sender;
- (NSString *) stringFromFileSize:(unsigned long long)theSize;
-//@property (assign) IBOutlet NSWindow *window;
-
-- (void) connection:(NSURLConnection*)connection didReceiveData:(NSData*)data;
@end
diff --git a/DDWRT_MonitorAppDelegate.m b/DDWRT_MonitorAppDelegate.m
index cea6d50..818b746 100644
--- a/DDWRT_MonitorAppDelegate.m
+++ b/DDWRT_MonitorAppDelegate.m
@@ -407,7 +407,7 @@
[menuUptime setTitle:uptime];
[menuLoad setTitle:load];
[menuLoad setHidden:false];
- [menuConnections setTitle:[NSString stringWithFormat:@"Connections: %@", ipconn]];
+ [menuClientsConnections setTitle:[NSString stringWithFormat:@"%@ Connection%@", ipconn, ([ipconn isEqualToString:@"1"] ? @"" : @"s")]];
[wrt_client getStatusUpdate:@"Status_Internet.live.asp" delegate:self callback:@selector(wanRequestCallback:)];
}
@@ -506,7 +506,101 @@
- (void) refreshClientsMenu:(id)sender
{
- //[self updateThroughput:nil];
+ [wrt_client getStatusUpdate:@"Status_Lan.live.asp" delegate:self callback:@selector(cbClientsRequest:)];
+}
+
+- (void) cbClientsRequest:(NSData*)data
+{
+ NSString * clientsStringData;
+
+ NSString *stringData = [ [NSString alloc] initWithData:data encoding:NSASCIIStringEncoding ];
+ NSString *keyData = @"{arp_table::";
+
+ clientsStringData = [ stringData substringFromIndex:([stringData rangeOfString:keyData].location + [keyData length]) ];
+ clientsStringData = [ clientsStringData substringToIndex:[clientsStringData rangeOfString:@"}"].location ];
+
+ // Remove any white spaces
+ NSArray *parts = [clientsStringData componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
+ NSArray *filteredArray = [parts filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != ''"]];
+ clientsStringData = [filteredArray componentsJoinedByString:@" "];
+ parts = nil;
+ filteredArray = nil;
+
+ // Remove any quotes
+ parts = [clientsStringData componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\'"]];
+ filteredArray = [parts filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != ''"]];
+ clientsStringData = [filteredArray componentsJoinedByString:@""];
+
+ NSArray *clientsData = [clientsStringData componentsSeparatedByString:@","];
+
+ long clientIndex;
+ NSMenu *clientMenu;
+ NSMenu *copyMenu;
+ NSMenuItem *copyMenuItem;
+ NSMenuItem *clientMenuItem;
+ NSMenuItem *clientItem;
+
+ unsigned long clientsCount = [clientsData count] / 4;
+ [menuClientsCount setTitle:[NSString stringWithFormat:@"%lu Active Client%@", clientsCount, (clientsCount > 1 ? @"s" : @"")]];
+
+ for (clientIndex = 0; clientIndex < [clientsData count]; clientIndex+=4) {
+ NSLog(@"Client: %@ IP: %@ MAC: %@ Connections: %@",
+ [clientsData objectAtIndex:clientIndex],
+ [clientsData objectAtIndex:clientIndex+1],
+ [clientsData objectAtIndex:clientIndex+2],
+ [clientsData objectAtIndex:clientIndex+3]);
+
+ clientMenu = [[NSMenu alloc] init];
+
+ // Hostname
+ copyMenu = [[NSMenu alloc] init];
+ copyMenuItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copyParentMenuTitle:) keyEquivalent:@""];
+ [copyMenuItem setEnabled:true];
+ [copyMenuItem setTarget:self];
+ [copyMenu addItem:copyMenuItem];
+
+ clientMenuItem = [[NSMenuItem alloc] initWithTitle:[clientsData objectAtIndex:clientIndex] action:nil keyEquivalent:@""];
+ [clientMenuItem setSubmenu:copyMenu];
+ [clientMenu addItem:clientMenuItem];
+
+ // IP
+ copyMenu = [[NSMenu alloc] init];
+ copyMenuItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copyParentMenuTitle:) keyEquivalent:@""];
+ [copyMenuItem setEnabled:true];
+ [copyMenuItem setTarget:self];
+ [copyMenu addItem:copyMenuItem];
+
+ clientMenuItem = [[NSMenuItem alloc] initWithTitle:[clientsData objectAtIndex:(clientIndex+1)] action:nil keyEquivalent:@""];
+ [clientMenuItem setSubmenu:copyMenu];
+ [clientMenu addItem:clientMenuItem];
+
+ // MAC
+ copyMenu = [[NSMenu alloc] init];
+ copyMenuItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copyParentMenuTitle:) keyEquivalent:@""];
+ [copyMenuItem setEnabled:true];
+ [copyMenuItem setTarget:self];
+ [copyMenu addItem:copyMenuItem];
+
+ clientMenuItem = [[NSMenuItem alloc] initWithTitle:[clientsData objectAtIndex:(clientIndex+2)] action:nil keyEquivalent:@""];
+ [clientMenuItem setSubmenu:copyMenu];
+ [clientMenu addItem:clientMenuItem];
+
+ // Connections
+ clientMenuItem = [[NSMenuItem alloc] initWithTitle:[clientsData objectAtIndex:(clientIndex+3)] action:nil keyEquivalent:@""];
+ [clientMenu addItem:clientMenuItem];
+
+ clientItem = [[NSMenuItem alloc] initWithTitle:[clientsData objectAtIndex:clientIndex] action:nil keyEquivalent:@""];
+ [clientItem setSubmenu:clientMenu];
+
+ [menuClients addItem:clientItem];
+ }
+}
+
+- (IBAction) copyParentMenuTitle:(id)sender
+{
+ NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard];
+ [pasteBoard declareTypes:[NSArray arrayWithObjects:NSStringPboardType, nil] owner: nil];
+ [pasteBoard setString:[[sender parentItem] title] forType:NSStringPboardType];
}
- (NSString *) stringFromFileSize:(unsigned long long)theSize
diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib
index 0d12eaf..e12839e 100644
--- a/English.lproj/MainMenu.xib
+++ b/English.lproj/MainMenu.xib
@@ -353,7 +353,7 @@
814
+
+
+
+ menuClientsSeparator
+
+
+
+ 817
+
+
+
+ menuClients
+
+
+
+ 818
+
+
+
+ menuClientsConnections
+
+
+
+ 819
+
+
+
+ copyParentMenuTitle:
+
+
+
+ 820
+
+
+
+ copyParentMenuTitle:
+
+
+
+ 821
+
+
+
+ copyParentMenuTitle:
+
+
+
+ 822
+
+
+
+ copyParentMenuTitle:
+
+
+
+ 823
+
@@ -2566,7 +2631,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
- 814
+ 823
@@ -2578,6 +2643,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
YES
YES
+ copyParentMenuTitle:
refreshClientsMenu:
refreshMenu:
refreshSystemMenu:
@@ -2589,12 +2655,14 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
id
id
id
+ id
YES
YES
+ copyParentMenuTitle:
refreshClientsMenu:
refreshMenu:
refreshSystemMenu:
@@ -2602,6 +2670,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
YES
+
+ copyParentMenuTitle:
+ id
+
refreshClientsMenu:
id
@@ -2640,7 +2712,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
configLabelRefresh
configLabelStatus
configStateStatus
- menuConnections
+ menuClients
+ menuClientsConnections
+ menuClientsCount
+ menuClientsSeparator
menuLoad
menuUptime
menuWanBandwidthGraph
@@ -2687,6 +2762,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
id
id
id
+ id
+ id
+ id
@@ -2709,7 +2787,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
configLabelRefresh
configLabelStatus
configStateStatus
- menuConnections
+ menuClients
+ menuClientsConnections
+ menuClientsCount
+ menuClientsSeparator
menuLoad
menuUptime
menuWanBandwidthGraph
@@ -2791,7 +2872,19 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
NSProgressIndicator
- menuConnections
+ menuClients
+ id
+
+
+ menuClientsConnections
+ id
+
+
+ menuClientsCount
+ id
+
+
+ menuClientsSeparator
id