/*}}}*/
using namespace std;
+CFStringRef Firmware_;
const char *Machine_;
const char *SerialNumber_;
URI uri = std::string(url);
std::string hs = uri.Host;
- struct hostent *he = gethostbyname(hs.c_str());
- if (he == NULL || he->h_addr_list[0] == NULL) {
- _error->Error(hstrerror(h_errno));
- Fail(true);
- free(url);
- }
-
- uri.Host = inet_ntoa(* (struct in_addr *) he->h_addr_list[0]);
-
std::string urs = uri;
CFStringRef sr = CFStringCreateWithCString(kCFAllocatorDefault, urs.c_str(), se);
CFRelease(sr);
}
+ if (Firmware_ != NULL)
+ CFHTTPMessageSetHeaderFieldValue(hm, CFSTR("X-Firmware"), Firmware_);
+
sr = CFStringCreateWithCString(kCFAllocatorDefault, Machine_, se);
CFHTTPMessageSetHeaderFieldValue(hm, CFSTR("X-Machine"), sr);
CFRelease(sr);
CFHTTPMessageSetHeaderFieldValue(hm, CFSTR("User-Agent"), CFSTR("Telesphoreo APT-HTTP/1.0.98"));
- sr = CFStringCreateWithCString(kCFAllocatorDefault, hs.c_str(), se);
- CFHTTPMessageSetHeaderFieldValue(hm, CFSTR("Host"), sr);
- CFRelease(sr);
-
CFReadStreamRef rs = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, hm);
CFRelease(hm);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
Machine_ = machine;
+ const char *path = "/System/Library/CoreServices/SystemVersion.plist";
+ CFURLRef url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (uint8_t *) path, strlen(path), false);
+
+ CFPropertyListRef plist; {
+ CFReadStreamRef stream = CFReadStreamCreateWithFile(kCFAllocatorDefault, url);
+ CFReadStreamOpen(stream);
+ plist = CFPropertyListCreateFromStream(kCFAllocatorDefault, stream, 0, kCFPropertyListImmutable, NULL, NULL);
+ CFReadStreamClose(stream);
+ }
+
+ CFRelease(url);
+
+ if (plist != NULL) {
+ Firmware_ = (CFStringRef) CFRetain(CFDictionaryGetValue((CFDictionaryRef) plist, CFSTR("ProductVersion")));
+ CFRelease(plist);
+ }
+
if (CFMutableDictionaryRef dict = IOServiceMatching("IOPlatformExpertDevice"))
if (io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, dict)) {
if (CFTypeRef serial = IORegistryEntryCreateCFProperty(service, CFSTR(kIOPlatformSerialNumberKey), kCFAllocatorDefault, 0)) {