Skip to content

Commit

Permalink
use object to encapsule values from dict instead of accessing directl…
Browse files Browse the repository at this point in the history
…y in desc callback
  • Loading branch information
sunflsks committed Feb 20, 2022
1 parent e52fc17 commit a9d3ff8
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 26 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ SRC += airplane/airplane.m
LIBS += -framework AppSupport
endif
ifneq ($(NO_MONITOR),1)
SRC += monitor/monitor.m
SRC += monitor/monitor.m monitor/SourceInfo.m monitor/DataInfo.m
LIBS += -framework NetworkStatistics
endif

Expand Down
15 changes: 15 additions & 0 deletions monitor/DataInfo.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#pragma once

#import <Foundation/Foundation.h>

@interface NCDataInfo : NSObject
@property(nonatomic) NSNumber* tx;
@property(nonatomic) NSNumber* txPackets;
@property(nonatomic) NSNumber* txWiFi;
@property(nonatomic) NSNumber* txCellular;
@property(nonatomic) NSNumber* rx;
@property(nonatomic) NSNumber* rxPackets;
@property(nonatomic) NSNumber* rxWiFi;
@property(nonatomic) NSNumber* rxCellular;
- (instancetype)initWithDict:(NSDictionary*)dict;
@end
22 changes: 22 additions & 0 deletions monitor/DataInfo.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#import "DataInfo.h"

#import <Foundation/Foundation.h>
#import <NetworkStatistics/NetworkStatistics.h>

@implementation NCDataInfo

- (instancetype)initWithDict:(NSDictionary*)dict {
self = [super init];

self.tx = dict[kNStatSrcKeyTxBytes];
self.txWiFi = dict[kNStatSrcKeyTxWiFiBytes];
self.txCellular = dict[kNStatSrcKeyTxCellularBytes];

self.rx = dict[kNStatSrcKeyRxBytes];
self.rxWiFi = dict[kNStatSrcKeyRxWiFiBytes];
self.rxCellular = dict[kNStatSrcKeyRxCellularBytes];

return self;
}

@end
17 changes: 17 additions & 0 deletions monitor/SourceInfo.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#import <Foundation/Foundation.h>

#include "DataInfo.h"

@interface NCSourceInfo : NSObject
@property(nonatomic) NSString* timeStamp;
@property(nonatomic) NSString* processName;
@property(nonatomic) NSString* protocol;
@property(nonatomic) NSString* TCPState;
@property(nonatomic) const struct sockaddr* localAddress;
@property(nonatomic) const struct sockaddr* remoteAddress;
@property(nonatomic) NSNumber* PID;
@property(nonatomic) NCDataInfo* dataProcessed;
- (instancetype)initWithDict:(NSDictionary*)dictionary;
@end
65 changes: 65 additions & 0 deletions monitor/SourceInfo.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#include "SourceInfo.h"

#import <Foundation/Foundation.h>
#import <NetworkStatistics/NetworkStatistics.h>

#include "DataInfo.h"

static BOOL isTCP(NSString*);
static NSString* interfaceType(NSDictionary* sourceDict);

@implementation NCSourceInfo
- (instancetype)initWithDict:(NSDictionary*)dict {
self = [super init];

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];

self.timeStamp = [formatter stringFromDate:[NSDate date]];
self.protocol = dict[kNStatSrcKeyProvider];
self.TCPState = nil;
self.localAddress = (const struct sockaddr*)[dict[kNStatSrcKeyLocal] bytes];
self.remoteAddress =
(const struct sockaddr*)[dict[kNStatSrcKeyRemote] bytes];

NCDataInfo* dataInfo = [[NCDataInfo alloc] initWithDict:dict];

self.PID = dict[kNStatSrcKeyPID];
self.processName = dict[kNStatSrcKeyProcessName];
self.dataProcessed = dataInfo;

if (isTCP(self.protocol)) {
self.TCPState = dict[kNStatSrcKeyTCPState];
}

return self;
}
@end

static NSString* interfaceType(NSDictionary* sourceDict) {
if (sourceDict[kNStatSrcKeyInterfaceTypeCellular]) {
return @"Cellular";
}

if (sourceDict[kNStatSrcKeyInterfaceTypeLoopback]) {
return @"Loopback";
}

if (sourceDict[kNStatSrcKeyInterfaceTypeUnknown]) {
return @"Other";
}

if (sourceDict[kNStatSrcKeyInterfaceTypeWiFi]) {
return @"WiFi";
}

if (sourceDict[kNStatSrcKeyInterfaceTypeWired]) {
return @"Wired";
}

return @"Other";
}

static BOOL isTCP(NSString* provider) {
return [provider isEqualToString:@"TCP"];
}
29 changes: 4 additions & 25 deletions monitor/monitor.m
Original file line number Diff line number Diff line change
@@ -1,35 +1,14 @@
#include <Foundation/Foundation.h>
#import <NetworkStatistics/NetworkStatistics.h>
#include <arpa/inet.h>
#include <err.h>

static inline BOOL isTCP(NSString* provider) {
return [provider isEqualToString:@"TCP"];
}
#include "SourceInfo.h"

void (^description_block)(CFDictionaryRef) = ^(CFDictionaryRef cfDict) {
NSDictionary* dict = (__bridge NSDictionary*)cfDict;

NSNumber* pid = dict[kNStatSrcKeyPID];
NSNumber* txcount = dict[kNStatSrcKeyTxBytes];
NSNumber* rxcount = dict[kNStatSrcKeyRxBytes];

NSString* pname = dict[kNStatSrcKeyProcessName];
NSString* provider = dict[kNStatSrcKeyProvider];
NSString* state = dict[kNStatSrcKeyTCPState];

NSMutableString* outputstr = [NSMutableString string];

[outputstr appendString:[NSString stringWithFormat:@"%@(%@): ", pname, pid]];
if (isTCP(provider)) {
[outputstr
appendString:[NSString stringWithFormat:@"TCPSTATE: %@, ", state]];
}

[outputstr
appendString:[NSString stringWithFormat:@"TX: %@, RX: %@, PROV: %@",
txcount, rxcount, provider]];

puts([outputstr UTF8String]);
NCSourceInfo* info = [[NCSourceInfo alloc] initWithDict:dict];
printf("%s|%s\n", [info.timeStamp UTF8String], [info.processName UTF8String]);
};

void (^callback)(void*, void*) = ^(NStatSourceRef ref, void* arg2) {
Expand Down

0 comments on commit a9d3ff8

Please sign in to comment.