|
|
|
//
|
|
|
|
// DDWRT_MonitorAppDelegate.m
|
|
|
|
// DDWRT-Monitor
|
|
|
|
//
|
|
|
|
// Created by Matthieu Lalonde on 11-05-27.
|
|
|
|
// Copyright 2011 __MyCompanyName__. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
#import "DDWRT_MonitorAppDelegate.h"
|
|
|
|
|
|
|
|
@implementation DDWRT_MonitorAppDelegate
|
|
|
|
|
|
|
|
//@synthesize window;
|
|
|
|
|
|
|
|
//- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
|
|
|
|
- (void) awakeFromNib
|
|
|
|
{
|
|
|
|
|
|
|
|
// Insert code here to initialize your application
|
|
|
|
[self showMenubar];
|
|
|
|
|
|
|
|
_wrtReachable = false;
|
|
|
|
|
|
|
|
defaults = [NSUserDefaults standardUserDefaults];
|
|
|
|
|
|
|
|
// check if the app is configured yet
|
|
|
|
if (![defaults boolForKey:@"configured"])
|
|
|
|
{
|
|
|
|
[self initDefaults];
|
|
|
|
}
|
|
|
|
|
|
|
|
NSLog(@"Reading defaults...");
|
|
|
|
[self readDefaults];
|
|
|
|
|
|
|
|
// initialize the client
|
|
|
|
wrt_client = [[WRTStatusClient alloc] initWithHostname:hostname port:&port username:username password:password];
|
|
|
|
|
|
|
|
//_readTimer = [NSTimer scheduledTimerWithTimeInterval:[[NSUserDefaults standardUserDefaults] integerForKey:@"refreshTime"] target:self selector:@selector(updateThroughput:) userInfo:nil repeats:YES];
|
|
|
|
//[_readTimer fire];
|
|
|
|
|
|
|
|
[self updateThroughput];
|
|
|
|
|
|
|
|
//WRTRequest *wrtr = [[WRTRequest alloc] init];
|
|
|
|
|
|
|
|
//[wrtr doRequest:self requestSelector:@selector(doUpdateStatus:) uri:@"Status_Router.live.asp"];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) dealloc {
|
|
|
|
//[_readTimer invalidate];
|
|
|
|
[AppMenu release];
|
|
|
|
[_appMenu release];
|
|
|
|
[ConfigPanel release];
|
|
|
|
[BandwidthViewer release];
|
|
|
|
[modalWindow release];
|
|
|
|
[super dealloc];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) initDefaults
|
|
|
|
{
|
|
|
|
NSLog(@"Creating new user defaults");
|
|
|
|
|
|
|
|
// do any other initialization you want to do here - e.g. the starting default values.
|
|
|
|
[defaults setValue:@"192.168.1.1" forKey:@"hostname"];
|
|
|
|
[defaults setInteger:80 forKey:@"port"];
|
|
|
|
[defaults setValue:@"" forKey:@"username"];
|
|
|
|
[defaults setValue:@"" forKey:@"password"];
|
|
|
|
|
|
|
|
[defaults setBool:YES forKey:@"showMenuIcon"];
|
|
|
|
[defaults setBool:YES forKey:@"useBytes"];
|
|
|
|
[defaults setInteger:4 forKey:@"refreshTime"];
|
|
|
|
|
|
|
|
[defaults setBool:YES forKey:@"configured"];
|
|
|
|
|
|
|
|
// sync the defaults to disk
|
|
|
|
//[defaults registerDefaults:appDefaults];
|
|
|
|
[defaults synchronize];
|
|
|
|
|
|
|
|
// TODO: Add modal alert "First launch" here...
|
|
|
|
[self showConfigPanel:self];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) readDefaults
|
|
|
|
{
|
|
|
|
hostname = [defaults valueForKey:@"hostname"];
|
|
|
|
port = [defaults integerForKey:@"port"];
|
|
|
|
username = [defaults valueForKey:@"username"];
|
|
|
|
password = [defaults valueForKey:@"password"];
|
|
|
|
|
|
|
|
showMenuIcon = [defaults boolForKey:@"showMenuIcon"];
|
|
|
|
useBytes = [defaults boolForKey:@"useBytes"];
|
|
|
|
refreshTime = [defaults integerForKey:@"refreshTime"];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) writeDefaults
|
|
|
|
{
|
|
|
|
// do any other initialization you want to do here - e.g. the starting default values.
|
|
|
|
[defaults setValue:hostname forKey:@"hostname"];
|
|
|
|
[defaults setInteger:port forKey:@"port"];
|
|
|
|
[defaults setValue:username forKey:@"username"];
|
|
|
|
[defaults setValue:password forKey:@"password"];
|
|
|
|
|
|
|
|
[defaults setBool:showMenuIcon forKey:@"showMenuIcon"];
|
|
|
|
[defaults setBool:useBytes forKey:@"useBytes"];
|
|
|
|
[defaults setInteger:refreshTime forKey:@"refreshTime"];
|
|
|
|
|
|
|
|
// sync the defaults to disk
|
|
|
|
//[defaults registerDefaults:appDefaults];
|
|
|
|
[defaults synchronize];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) terminate:(id)sender {
|
|
|
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
|
|
|
[self dealloc];
|
|
|
|
[[NSApplication sharedApplication] terminate:self];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) showMenubar
|
|
|
|
{
|
|
|
|
NSLog(@"Showing Menu Item");
|
|
|
|
|
|
|
|
NSStatusBar* bar = [NSStatusBar systemStatusBar];
|
|
|
|
_appMenu = [bar statusItemWithLength:NSVariableStatusItemLength];
|
|
|
|
[_appMenu retain];
|
|
|
|
|
|
|
|
//[self setMenubarText:@"000KB/s\n000KB/s"];
|
|
|
|
|
|
|
|
//BOOL showIcon = [[NSUserDefaults standardUserDefaults] boolForKey:@"showMenuIcon"];
|
|
|
|
//if (showIcon == true) {
|
|
|
|
[self showMenubarIcon:false];
|
|
|
|
//}
|
|
|
|
|
|
|
|
[_appMenu setHighlightMode:YES];
|
|
|
|
[_appMenu setMenu:AppMenu];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) hideMenubar
|
|
|
|
{
|
|
|
|
[_appMenu release];
|
|
|
|
_appMenu = nil;
|
|
|
|
[AppMenu release];
|
|
|
|
AppMenu = nil;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) showMenubarIcon:(BOOL)enabled
|
|
|
|
{
|
|
|
|
NSImage* icon = [NSImage imageNamed:(enabled == true ? @"MenuIcon" : @"MenuIconDisabled")];
|
|
|
|
[_appMenu setImage:icon];
|
|
|
|
[_appMenu setAlternateImage:nil];
|
|
|
|
[icon release];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) hideMenubarIcon
|
|
|
|
{
|
|
|
|
[_appMenu setImage:nil];
|
|
|
|
[_appMenu setAlternateImage:nil];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setMenubarText:(NSString *)menubarText
|
|
|
|
{
|
|
|
|
|
|
|
|
// Todo set proper line height
|
|
|
|
NSFontManager *fontManager = [NSFontManager sharedFontManager];
|
|
|
|
NSFont *menuFont = [fontManager fontWithFamily:@"Lucida Grande" traits:NSBoldFontMask weight:10 size:8];
|
|
|
|
|
|
|
|
NSDictionary *titleAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:menuFont, NSFontAttributeName,
|
|
|
|
[NSColor blackColor], NSForegroundColorAttributeName, nil];
|
|
|
|
NSAttributedString *menuTitle = [[NSAttributedString alloc] initWithString:menubarText attributes:titleAttributes];
|
|
|
|
|
|
|
|
[_appMenu setAttributedTitle:menuTitle];
|
|
|
|
|
|
|
|
[fontManager release];
|
|
|
|
[menuFont release];
|
|
|
|
[menuTitle release];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) showConfigPanel:(id)sender
|
|
|
|
{
|
|
|
|
[configFieldShowIcon setState:([defaults boolForKey:@"showMenuIcon"] ? 1 : 0)];
|
|
|
|
[configFieldUseBytes setState:([defaults boolForKey:@"useBytes"] ? 1 : 0)];
|
|
|
|
|
|
|
|
if (hostname != nil) {
|
|
|
|
[configFieldHostname setStringValue:hostname];
|
|
|
|
}
|
|
|
|
|
|
|
|
[configFieldPort setIntValue:[defaults integerForKey:@"port"]];
|
|
|
|
|
|
|
|
[configFieldRefresh setIntegerValue:[defaults integerForKey:@"refreshTime"]];
|
|
|
|
|
|
|
|
[configLabelRefresh setStringValue:[NSString stringWithFormat:@"%d s", ([defaults integerForKey:@"refreshTime"] + 1)]];
|
|
|
|
|
|
|
|
[ConfigPanel makeKeyAndOrderFront:nil];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) hideConfigPanel:(id)sender
|
|
|
|
{
|
|
|
|
/*NSString *hostname = [[NSUserDefaults standardUserDefaults] stringForKey:@"hostname"];
|
|
|
|
|
|
|
|
if (hostname == nil && [[sender title] isEqualToString:@"Cancel"]) {
|
|
|
|
// TODO: Add modal alert "will quit if not configured"
|
|
|
|
[self terminate:nil];
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
[ConfigPanel orderOut:nil];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) showBandwidthViewer:(id)sender
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// NSString *urlAddress = [NSString stringWithFormat:@"https://%@:%d/graph_if.svg?ppp1",
|
|
|
|
// [[NSUserDefaults standardUserDefaults] stringForKey:@"hostname"],
|
|
|
|
// [[NSUserDefaults standardUserDefaults] integerForKey:@"port"]];
|
|
|
|
// NSLog(@"%@", urlAddress);
|
|
|
|
//
|
|
|
|
|
|
|
|
[BandwidthViewer makeKeyAndOrderFront:nil];
|
|
|
|
|
|
|
|
NSURLRequest *request = [[wrt_client requestForBandwidthViewerForInterface:@"ppp1"] retain];
|
|
|
|
|
|
|
|
[ [BandwidthViewerWebView mainFrame] loadRequest: request ];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) hideBandwidthViewer:(id)sender
|
|
|
|
{
|
|
|
|
[BandwidthViewer orderOut:nil];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setConfigHostname:(id)sender
|
|
|
|
{
|
|
|
|
NSLog(@"%@", [sender title]);
|
|
|
|
}
|
|
|
|
|
|
|
|
- (IBAction) setConfigProtocol:(id)sender
|
|
|
|
{
|
|
|
|
NSLog(@"%@", [sender title]);
|
|
|
|
if ([sender state] == NSOnState) {
|
|
|
|
NSLog(@"Yes");
|
|
|
|
//NSLog(@"%s", [sender title]);
|
|
|
|
} else {
|
|
|
|
NSLog(@"No");
|
|
|
|
//NSLog(@"%s", [sender title]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setConfigPort:(id)sender
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setConfigRefresh:(id)sender
|
|
|
|
{
|
|
|
|
[configLabelRefresh setStringValue:[NSString stringWithFormat:@"%u s", ([sender integerValue] + 1)]];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setConfigWan:(id)sender
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setConfigBytes:(id)sender
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setConfigIcon:(id)sender
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) saveConfig:(id)sender
|
|
|
|
{
|
|
|
|
[configStateStatus startAnimation:nil];
|
|
|
|
[configStateStatus setHidden:false];
|
|
|
|
|
|
|
|
//WRTRequest *wrtr = [[WRTRequest alloc] init];
|
|
|
|
|
|
|
|
//[wrtr doRequest:self requestSelector:@selector(configSaveRequestCallback:) uri:@"Status_Router.live.asp"];
|
|
|
|
[self configSaveRequestCallback:nil];
|
|
|
|
}
|
|
|
|
|
|
|
|
-(NSString *)getKey:(NSString *)stringData key:(NSString *)key
|
|
|
|
{
|
|
|
|
NSString *keyString = [NSString stringWithFormat:@"%@::", key];
|
|
|
|
NSString *returnData;
|
|
|
|
NSRange formatValid = [stringData rangeOfString:@"}"];
|
|
|
|
|
|
|
|
if (formatValid.location != NSNotFound) {
|
|
|
|
NSRange startRange = [stringData rangeOfString:keyString];
|
|
|
|
|
|
|
|
if (startRange.location != NSNotFound) {
|
|
|
|
|
|
|
|
returnData = [NSString stringWithString:stringData];
|
|
|
|
returnData = [returnData substringFromIndex:(startRange.location + [keyString length])];
|
|
|
|
returnData = [returnData substringToIndex:[returnData rangeOfString:@"}"].location];
|
|
|
|
}
|
|
|
|
|
|
|
|
returnData = [returnData stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
|
|
|
}
|
|
|
|
|
|
|
|
//[keyString release];
|
|
|
|
|
|
|
|
return returnData;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
-(void)configSaveRequestCallback:(NSData *)data
|
|
|
|
{
|
|
|
|
// TODO check that the request is actually successful
|
|
|
|
|
|
|
|
hostname = [configFieldHostname stringValue];
|
|
|
|
[defaults setValue:hostname forKey:@"hostname"];
|
|
|
|
|
|
|
|
port = [configFieldPort intValue];
|
|
|
|
[defaults setInteger:port forKey:@"port"];
|
|
|
|
|
|
|
|
NSLog(@"Got %@ for %@", hostname, [configFieldHostname stringValue]);
|
|
|
|
|
|
|
|
//NSLog(@"%@", [configFieldProtocol str]);
|
|
|
|
|
|
|
|
refreshTime = [configFieldRefresh integerValue];
|
|
|
|
[defaults setInteger:refreshTime forKey:@"refreshTime"];
|
|
|
|
|
|
|
|
useBytes = ([configFieldUseBytes state] == 1 ? true: false);
|
|
|
|
[defaults setBool:useBytes forKey:@"useBytes"];
|
|
|
|
|
|
|
|
if ([configFieldShowIcon state] == NSOffState && [defaults boolForKey:@"showMenuIcon"] == true) {
|
|
|
|
[self hideMenubarIcon];
|
|
|
|
} else if ([configFieldShowIcon state] == NSOnState && [defaults boolForKey:@"showMenuIcon"] == false) {
|
|
|
|
[self showMenubarIcon:false];
|
|
|
|
}
|
|
|
|
|
|
|
|
showMenuIcon = ([configFieldShowIcon state] == 1 ? true: false);
|
|
|
|
[defaults setBool:showMenuIcon forKey:@"showMenuIcon"];
|
|
|
|
|
|
|
|
[configStateStatus stopAnimation:nil];
|
|
|
|
[configStateStatus setHidden:true];
|
|
|
|
|
|
|
|
[defaults synchronize];
|
|
|
|
|
|
|
|
//[self doUpdateStatus:data];
|
|
|
|
|
|
|
|
[self hideConfigPanel:nil];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) updateThroughput
|
|
|
|
{
|
|
|
|
//WRTRequest *wrtr = [[WRTRequest alloc] init];
|
|
|
|
|
|
|
|
//[wrtr doRequest:self requestSelector:@selector(throughputCallback:) uri:@"fetchif.cgi?ppp1"];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) throughputCallback:(NSData *)data
|
|
|
|
{
|
|
|
|
|
|
|
|
/*NSDate *start = [NSDate date];
|
|
|
|
NSTimeInterval timeInterval = [start timeIntervalSinceNow];
|
|
|
|
NSLog(@"%f", timeInterval);
|
|
|
|
|
|
|
|
NSString *stringData = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
|
|
|
|
stringData = [stringData substringFromIndex:([stringData rangeOfString:@":"].location + 1)];
|
|
|
|
NSArray *listItems = [stringData componentsSeparatedByString:@" "];
|
|
|
|
|
|
|
|
NSLog(@"%@", [listItems objectAtIndex:0]);
|
|
|
|
unsigned long long ifIn = [NSNumber numberWithString:[listItems objectAtIndex:0]];
|
|
|
|
unsigned long long ifOut = [NSNumber numberWithString:[listItems objectAtIndex:8]];
|
|
|
|
|
|
|
|
NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate];*/
|
|
|
|
}
|
|
|
|
|
|
|
|
-(void)doUpdateStatus:(NSData *)data
|
|
|
|
{
|
|
|
|
NSString *stringData = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
|
|
|
|
|
|
|
|
NSString *ipconn = [self getKey:stringData key:@"ip_conntrack"];
|
|
|
|
|
|
|
|
NSString *wanip = [self getKey:stringData key:@"ipinfo"];
|
|
|
|
wanip = [wanip substringFromIndex:([wanip rangeOfString:@" "].location+1)];
|
|
|
|
|
|
|
|
NSString *uptime = [self getKey:stringData key:@"uptime"];
|
|
|
|
NSString *loadSplit = @", load average: ";
|
|
|
|
NSString *load = [uptime substringFromIndex:[uptime rangeOfString:loadSplit].location+[loadSplit length]];
|
|
|
|
uptime = [uptime substringToIndex:[uptime rangeOfString:@", load"].location]; // Cut the load
|
|
|
|
uptime = [uptime substringFromIndex:[uptime rangeOfString:@" "].location+1]; // Trim
|
|
|
|
uptime = [uptime stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[uptime substringToIndex:1] uppercaseString]]; // UCFirst
|
|
|
|
|
|
|
|
[menuWanIP setTitle:wanip];
|
|
|
|
[menuUptime setTitle:uptime];
|
|
|
|
[menuLoad setTitle:load];
|
|
|
|
[menuLoad setHidden:false];
|
|
|
|
[menuConnections setTitle:[NSString stringWithFormat:@"Connections: %@", ipconn]];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) refreshMenu:(id)sender
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) refreshSystemMenu:(id)sender
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) refreshWanMenu:(id)sender
|
|
|
|
{
|
|
|
|
NSLog(@"Refreshing Wan Menu");
|
|
|
|
//WRTRequest *wrtr = [[WRTRequest alloc] init];
|
|
|
|
|
|
|
|
//[wrtr doRequest:self requestSelector:@selector(wanRequestCallback:) uri:@"Status_Internet.live.asp"];
|
|
|
|
|
|
|
|
[wrt_client getStatusUpdate:@"Status_Bandwidth.asp" delegate:wanRequestCallback];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) wanRequestCallback:(NSData *)data
|
|
|
|
{
|
|
|
|
NSString *stringData = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
|
|
|
|
NSLog(@"%@", stringData);
|
|
|
|
/*
|
|
|
|
NSString *wanStatus = [self getKey:stringData key:@"wan_status"];
|
|
|
|
NSString *wanName = [self getKey:stringData key:@"wan_shortproto"];
|
|
|
|
if ([wanName isEqualToString:@"pppoe"] == true) {
|
|
|
|
wanName = @"PPPoE";
|
|
|
|
} else if ([wanName isEqualToString:@"static"] == true) {
|
|
|
|
wanName = @"Static";
|
|
|
|
} else {
|
|
|
|
wanName = [wanName uppercaseString];
|
|
|
|
}
|
|
|
|
|
|
|
|
wanStatus = [wanStatus substringToIndex:[wanStatus rangeOfString:@"&"].location];
|
|
|
|
[menuWanStatus setTitle:[NSString stringWithFormat:@"%@ %@", wanName, wanStatus]];
|
|
|
|
|
|
|
|
if ([_appMenu image] != nil) {
|
|
|
|
[self showMenubarIcon:[wanStatus isEqualToString:@"Connected"]];
|
|
|
|
}
|
|
|
|
|
|
|
|
NSString *wanUptime = [self getKey:stringData key:@"wan_uptime"];
|
|
|
|
if ([wanStatus isEqualToString:@"Connected"] == true) {
|
|
|
|
[menuWanUptime setTitle:wanUptime];
|
|
|
|
[menuWanUptime setHidden:false];
|
|
|
|
[menuWanSeparator setHidden:false];
|
|
|
|
[menuWanBandwidthGraph setEnabled:true];
|
|
|
|
[menuWanTrafficIn setHidden:false];
|
|
|
|
[menuWanTrafficOut setHidden:false];
|
|
|
|
} else {
|
|
|
|
[menuWanUptime setHidden:true];
|
|
|
|
[menuWanSeparator setHidden:true];
|
|
|
|
[menuWanBandwidthGraph setEnabled:false];
|
|
|
|
[menuWanTrafficIn setHidden:true];
|
|
|
|
[menuWanTrafficOut setHidden:true];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
NSString *trafficIn = [self getKey:stringData key:@"ttraff_in"];
|
|
|
|
NSString *trafficOut = [self getKey:stringData key:@"ttraff_out"];
|
|
|
|
trafficIn = [self stringFromFileSize:([trafficIn longLongValue] * 1024 * 1024)];
|
|
|
|
trafficOut = [self stringFromFileSize:([trafficOut longLongValue] * 1024 * 1024)];
|
|
|
|
|
|
|
|
[menuWanTrafficIn setTitle:[NSString stringWithFormat:@"In: %@", trafficIn]];
|
|
|
|
[menuWanTrafficOut setTitle:[NSString stringWithFormat:@"Out: %@", trafficOut]];
|
|
|
|
|
|
|
|
NSString *wanDNS0 = [self getKey:stringData key:@"wan_dns0"];
|
|
|
|
NSString *wanDNS1 = [self getKey:stringData key:@"wan_dns1"];
|
|
|
|
NSString *wanDNS2 = [self getKey:stringData key:@"wan_dns2"];
|
|
|
|
|
|
|
|
if ([wanDNS0 length] > 0) {
|
|
|
|
[menuWanDNS setEnabled:true];
|
|
|
|
[menuWanDNSItem0 setTitle: wanDNS0];
|
|
|
|
[menuWanDNSItem0 setHidden:false];
|
|
|
|
}
|
|
|
|
|
|
|
|
if ([wanDNS1 length] > 0) {
|
|
|
|
[menuWanDNS setEnabled:true];
|
|
|
|
[menuWanDNSItem1 setTitle: wanDNS1];
|
|
|
|
[menuWanDNSItem1 setHidden:false];
|
|
|
|
}
|
|
|
|
|
|
|
|
if ([wanDNS2 length] > 0) {
|
|
|
|
[menuWanDNS setEnabled:true];
|
|
|
|
[menuWanDNSItem2 setTitle: wanDNS2];
|
|
|
|
[menuWanDNSItem2 setHidden:false];
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
[stringData release];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) refreshClientsMenu:(id)sender
|
|
|
|
{
|
|
|
|
[self updateThroughput];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSString *) stringFromFileSize:(unsigned long long)theSize
|
|
|
|
{
|
|
|
|
|
|
|
|
double floatSize = theSize;
|
|
|
|
if (theSize<1023)
|
|
|
|
return([NSString stringWithFormat:@"%qx bytes",theSize]);
|
|
|
|
floatSize = floatSize / 1024;
|
|
|
|
if (floatSize<1023)
|
|
|
|
return([NSString stringWithFormat:@"%1.1f KiB",floatSize]);
|
|
|
|
floatSize = floatSize / 1024;
|
|
|
|
if (floatSize<1023)
|
|
|
|
return([NSString stringWithFormat:@"%1.1f MiB",floatSize]);
|
|
|
|
floatSize = floatSize / 1024;
|
|
|
|
if (floatSize<1023)
|
|
|
|
return([NSString stringWithFormat:@"%1.1f GiB",floatSize]);
|
|
|
|
floatSize = floatSize / 1024;
|
|
|
|
|
|
|
|
return([NSString stringWithFormat:@"%1.1f TiB",floatSize]);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (void) connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
|
|
|
|
{
|
|
|
|
NSLog(@"Delegate Received: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|