int main(int argc, char **argv) { char tHWID[HWID_SIZE] = {0,51,52,53,54,55}; char tHWID_Hex[HWID_SIZE * 2]; char tServerName[56] = "ShairPort"; char tPassword[56] = ""; struct addrinfo *tAddrInfo; int tSimLevel = 0; int tUseKnownHWID = FALSE; int tDaemonize = FALSE; int tPort = PORT; char *arg; while ( (arg = *++argv) ) { if(!strcmp(arg, "-a")) { strncpy(tServerName, *++argv, 55); argc--; } else if(!strcmp(arg, "--apname=")) { strncpy(tServerName, arg+9, 55); } else if(!strcmp(arg, "-p")) { strncpy(tPassword, *++argv, 55); argc--; } else if(!strcmp(arg, "--password="******"-o")) { tPort = atoi(*++argv); argc--; } else if(!strcmp(arg, "--server_port=")) { tPort = atoi(arg+14); } else if(!strcmp(arg, "-k")) { tUseKnownHWID = TRUE; } else if(!strcmp(arg, "-q") || !strcmp(arg, "--quiet")) { kCurrentLogLevel = 0; } else if(!strcmp(arg, "-d")) { tDaemonize = TRUE; kCurrentLogLevel = 0; } else if(!strcmp(arg, "-v")) { kCurrentLogLevel = LOG_DEBUG; } else if(!strcmp(arg, "-v2")) { kCurrentLogLevel = LOG_DEBUG_V; } else if(!strcmp(arg, "-vv") || !strcmp(arg, "-v3")) { kCurrentLogLevel = LOG_DEBUG_VV; } else if(!strcmp(arg, "-h") || !strcmp(arg, "--help")) { slog(LOG_INFO, "ShairPort version 0.05 C port - Airport Express emulator\n"); slog(LOG_INFO, "Usage:\nshairport [OPTION...]\n\nOptions:\n"); slog(LOG_INFO, " -a, --apname=AirPort Sets Airport name\n"); slog(LOG_INFO, " -p, --password=secret Sets Password (not working)\n"); slog(LOG_INFO, " -o, --server_port=5000 Sets Port for Avahi/dns-sd\n"); slog(LOG_INFO, " -d Daemon mode\n"); slog(LOG_INFO, " -q, --quiet Supresses all output.\n"); slog(LOG_INFO, " -v,-v2,-v3,-vv Various debugging levels\n"); slog(LOG_INFO, "\n"); return 0; } } if(tDaemonize) { int tPid = fork(); if(tPid < 0) { exit(1); // Error on fork } else if(tPid > 0) { exit(0); } else { setsid(); int tIdx = 0; for(tIdx = getdtablesize(); tIdx >= 0; --tIdx) { close(tIdx); } tIdx = open(DEVNULL, O_RDWR); dup(tIdx); dup(tIdx); } } srand ( time(NULL) ); // Copy over empty 00's //tPrintHWID[tIdx] = tAddr[0]; int tIdx = 0; for(tIdx=0;tIdx<HWID_SIZE;tIdx++) { if(tIdx > 0) { if(!tUseKnownHWID) { int tVal = ((random() % 80) + 33); tHWID[tIdx] = tVal; } //tPrintHWID[tIdx] = tAddr[tIdx]; } sprintf(tHWID_Hex+(tIdx*2), "%02X",tHWID[tIdx]); } //tPrintHWID[HWID_SIZE] = '\0'; slog(LOG_INFO, "LogLevel: %d\n", kCurrentLogLevel); slog(LOG_INFO, "AirName: %s\n", tServerName); slog(LOG_INFO, "HWID: %.*s\n", HWID_SIZE, tHWID+1); slog(LOG_INFO, "HWID_Hex(%d): %s\n", strlen(tHWID_Hex), tHWID_Hex); if(tSimLevel >= 1) { #ifdef SIM_INCL sim(tSimLevel, tTestValue, tHWID); #endif return(1); } else { startAvahi(tHWID_Hex, tServerName, tPort); slog(LOG_DEBUG_V, "Starting connection server: specified server port: %d\n", tPort); int tServerSock = setupListenServer(&tAddrInfo, tPort); if(tServerSock < 0) { freeaddrinfo(tAddrInfo); slog(LOG_INFO, "Error setting up server socket on port %d, try specifying a different port\n", tPort); exit(1); } int tClientSock = 0; while(1) { slog(LOG_DEBUG_V, "Waiting for clients to connect\n"); tClientSock = acceptClient(tServerSock, tAddrInfo); if(tClientSock > 0) { int tPid = fork(); if(tPid == 0) { freeaddrinfo(tAddrInfo); tAddrInfo = NULL; slog(LOG_DEBUG, "...Accepted Client Connection..\n"); close(tServerSock); handleClient(tClientSock, tPassword, tHWID); //close(tClientSock); return 0; } else { slog(LOG_DEBUG_VV, "Child now busy handling new client\n"); close(tClientSock); } } else { // failed to init server socket....try waiting a moment... sleep(2); } } } slog(LOG_DEBUG_VV, "Finished, and waiting to clean everything up\n"); sleep(1); if(tAddrInfo != NULL) { freeaddrinfo(tAddrInfo); } return 0; }
int shairport_main(int argc, char **argv) #endif { printf("initializing shairport\n"); char tHWID_Hex[HWID_SIZE * 2 + 1]; char tKnownHwid[32]; memset(tHWID_Hex, 0, sizeof(tHWID_Hex)); char tServerName[56] = "ShairPort"; int tSimLevel = 0; int tUseKnownHWID = FALSE; int tDaemonize = FALSE; int tPort = PORT; char *arg; while ( (arg = *++argv) ) { if(!strcmp(arg, "-a")) { strncpy(tServerName, *++argv, 55); argc--; } else if(!strncmp(arg, "--apname=", 9)) { strncpy(tServerName, arg+9, 55); } else if(!strcmp(arg, "-p")) { strncpy(tPassword, *++argv, 55); argc--; } else if(!strncmp(arg, "--password="******"-o")) { tPort = atoi(*++argv); argc--; } else if(!strncmp(arg, "--server_port=", 14)) { tPort = atoi(arg+14); } else if(!strcmp(arg, "-b")) { buffer_start_fill = atoi(*++argv); argc--; } else if(!strncmp(arg, "--buffer=", 9)) { buffer_start_fill = atoi(arg + 9); } else if(!strncmp(arg, "--mac=", 6)) { tUseKnownHWID = TRUE; strcpy(tKnownHwid, arg+6); } else if(!strcmp(arg, "-q") || !strncmp(arg, "--quiet", 7)) { kCurrentLogLevel = 0; } else if(!strcmp(arg, "-d")) { tDaemonize = TRUE; kCurrentLogLevel = 0; } else if(!strcmp(arg, "-v")) { kCurrentLogLevel = LOG_DEBUG; } else if(!strcmp(arg, "-v2")) { kCurrentLogLevel = LOG_DEBUG_V; } else if(!strcmp(arg, "-vv") || !strcmp(arg, "-v3")) { kCurrentLogLevel = LOG_DEBUG_VV; } else if(!strcmp(arg, "-h") || !strcmp(arg, "--help")) { slog(LOG_INFO, "ShairPort version 0.05 C port - Airport Express emulator\n"); slog(LOG_INFO, "Usage:\nshairport [OPTION...]\n\nOptions:\n"); slog(LOG_INFO, " -a, --apname=AirPort Sets Airport name\n"); slog(LOG_INFO, " -p, --password=secret Sets Password (not working)\n"); slog(LOG_INFO, " -o, --server_port=5000 Sets Port for Avahi/dns-sd\n"); slog(LOG_INFO, " -b, --buffer=282 Sets Number of frames to buffer before beginning playback\n"); slog(LOG_INFO, " -d Daemon mode\n"); slog(LOG_INFO, " -q, --quiet Supresses all output.\n"); slog(LOG_INFO, " -v,-v2,-v3,-vv Various debugging levels\n"); slog(LOG_INFO, "\n"); return 0; } } if ( buffer_start_fill < 30 || buffer_start_fill > BUFFER_FRAMES ) { fprintf(stderr, "buffer value must be > 30 and < %d\n", BUFFER_FRAMES); return(0); } if(tDaemonize) { int tPid = fork(); if(tPid < 0) { exit(1); // Error on fork } else if(tPid > 0) { exit(0); } else { setsid(); int tIdx = 0; for(tIdx = getdtablesize(); tIdx >= 0; --tIdx) { close(tIdx); } tIdx = open(DEVNULL, O_RDWR); dup(tIdx); dup(tIdx); } } srand ( time(NULL) ); if (!tUseKnownHWID) { srandom ( time(NULL) ); int tIdx = 0; for(tIdx=0;tIdx<HWID_SIZE;tIdx++) { if(tIdx > 0) { if(!tUseKnownHWID) { int tVal = ((random() % 80) + 33); tHWID[tIdx] = tVal; } } sprintf(tHWID_Hex+(tIdx*2), "%02X",tHWID[tIdx]); } } else { strcpy(tHWID_Hex, tKnownHwid); sscanf(tHWID_Hex, "%02X%02X%02X%02X%02X%02X", &tHWID[0], &tHWID[1], &tHWID[2], &tHWID[3], &tHWID[4], &tHWID[5]); } slog(LOG_INFO, "LogLevel: %d\n", kCurrentLogLevel); slog(LOG_INFO, "AirName: %s\n", tServerName); slog(LOG_INFO, "HWID: %.*s\n", HWID_SIZE, tHWID+1); slog(LOG_INFO, "HWID_Hex(%d): %s\n", strlen(tHWID_Hex), tHWID_Hex); if(tSimLevel >= 1) { #ifdef SIM_INCL sim(tSimLevel, tTestValue, tHWID); #endif return(1); } else { #ifndef BOXEE startAvahi(tHWID_Hex, tServerName, tPort); #endif slog(LOG_DEBUG_V, "Starting connection server: specified server port: %d\n", tPort); tServerSock = setupListenServer(&tAddrInfo, tPort); if(tServerSock < 0) { freeaddrinfo(tAddrInfo); slog(LOG_INFO, "Error setting up server socket on port %d, try specifying a different port\n", tPort); return 0; } m_running = 1; return 1; } }
int main(int argc, char **argv) { // unfortunately we can't just IGN on non-SysV systems struct sigaction sa; sa.sa_handler = handle_sigchld; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); if (sigaction(SIGCHLD, &sa, NULL) < 0) { perror("sigaction"); return 1; } // EZP_XXX: Using LAN MAC char buf[SHORT_BUF_LEN]; unsigned int mac[6]={0,0,0,0,0,0}; ezplib_get_attr_val("lan_hwaddr_rule_default", 0, "hwaddr", buf, sizeof(buf), EZPLIB_USE_CLI); sscanf(buf,"%2X:%2X:%2X:%2X:%2X:%2X", &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]); unsigned char tHWID[HWID_SIZE] = {mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]}; char tHWID_Hex[HWID_SIZE * 2 + 1]; memset(tHWID_Hex, 0, sizeof(tHWID_Hex)); char tServerName[56] = "ShairPort"; char tPassword[56] = ""; struct addrinfo *tAddrInfo; int tSimLevel = 0; int tUseKnownHWID = FALSE; int tDaemonize = FALSE; int tPort = PORT; char *arg; while ( (arg = *++argv) ) { if(!strcmp(arg, "-a")) { strncpy(tServerName, *++argv, 55); argc--; } else if(!strncmp(arg, "--apname=", 9)) { strncpy(tServerName, arg+9, 55); } else if(!strcmp(arg, "-p")) { strncpy(tPassword, *++argv, 55); argc--; } else if(!strncmp(arg, "--password="******"-o")) { tPort = atoi(*++argv); argc--; } else if(!strncmp(arg, "--server_port=", 14)) { tPort = atoi(arg+14); } else if(!strcmp(arg, "-b")) { bufferStartFill = atoi(*++argv); argc--; } else if(!strncmp(arg, "--buffer=", 9)) { bufferStartFill = atoi(arg + 9); } else if(!strcmp(arg, "-k")) { tUseKnownHWID = TRUE; } else if(!strcmp(arg, "-q") || !strncmp(arg, "--quiet", 7)) { kCurrentLogLevel = 0; } else if(!strcmp(arg, "-d")) { tDaemonize = TRUE; kCurrentLogLevel = 0; } else if(!strcmp(arg, "-v")) { kCurrentLogLevel = LOG_DEBUG; } else if(!strcmp(arg, "-v2")) { kCurrentLogLevel = LOG_DEBUG_V; } else if(!strcmp(arg, "-vv") || !strcmp(arg, "-v3")) { kCurrentLogLevel = LOG_DEBUG_VV; } else if(!strcmp(arg, "-h") || !strcmp(arg, "--help")) { slog(LOG_INFO, "ShairPort version 0.05 C port - Airport Express emulator\n"); slog(LOG_INFO, "Usage:\nshairport [OPTION...]\n\nOptions:\n"); slog(LOG_INFO, " -a, --apname=AirPort Sets Airport name\n"); slog(LOG_INFO, " -p, --password=secret Sets Password (not working)\n"); slog(LOG_INFO, " -o, --server_port=5002 Sets Port for Avahi/dns-sd/howl\n"); slog(LOG_INFO, " -b, --buffer=282 Sets Number of frames to buffer before beginning playback\n"); slog(LOG_INFO, " -d Daemon mode\n"); slog(LOG_INFO, " -q, --quiet Supresses all output.\n"); slog(LOG_INFO, " -v,-v2,-v3,-vv Various debugging levels\n"); slog(LOG_INFO, "\n"); return 0; } } /* if ( bufferStartFill < 30 || bufferStartFill > BUFFER_FRAMES ) { fprintf(stderr, "buffer value must be > 30 and < %d\n", BUFFER_FRAMES); return(0); } */ if(tDaemonize) { int tPid = fork(); if(tPid < 0) { exit(1); // Error on fork } else if(tPid > 0) { exit(0); } else { setsid(); int tIdx = 0; for(tIdx = getdtablesize(); tIdx >= 0; --tIdx) { close(tIdx); } tIdx = open(DEVNULL, O_RDWR); dup(tIdx); dup(tIdx); } } srandom ( time(NULL) ); int tIdx = 0; for(tIdx=0;tIdx<HWID_SIZE;tIdx++) { if(tIdx > 0) { if(!tUseKnownHWID) { int tVal = ((random() % 80) + 33); tHWID[tIdx] = tVal; } } sprintf(tHWID_Hex+(tIdx*2), "%02X",tHWID[tIdx]); } slog(LOG_INFO, "LogLevel: %d\n", kCurrentLogLevel); slog(LOG_INFO, "AirName: %s\n", tServerName); slog(LOG_INFO, "HWID: %.*s\n", HWID_SIZE, tHWID+1); slog(LOG_INFO, "HWID_Hex(%d): %s\n", strlen(tHWID_Hex), tHWID_Hex); loadKey(); if(tSimLevel >= 1) { #ifdef SIM_INCL sim(tSimLevel, tTestValue, tHWID); #endif return(1); } else { slog(LOG_DEBUG_V, "Starting connection server: specified server port: %d\n", tPort); int tServerSock = setupListenServer(&tAddrInfo, tPort); if(tServerSock < 0) { freeaddrinfo(tAddrInfo); slog(LOG_INFO, "Error setting up server socket on port %d, try specifying a different port\n", tPort); exit(1); } int tClientSock = 0; while(1) { slog(LOG_DEBUG_V, "Waiting for clients to connect\n"); tClientSock = acceptClient(tServerSock, tAddrInfo); if(tClientSock > 0) { int tPid = fork(); if(tPid == 0) { freeaddrinfo(tAddrInfo); tAddrInfo = NULL; slog(LOG_DEBUG, "...Accepted Client Connection..\n"); close(tServerSock); handleClient(tClientSock, tPassword, (char*)tHWID); //close(tClientSock); return 0; } else { slog(LOG_DEBUG_VV, "Child now busy handling new client\n"); wait(NULL); close(tClientSock); } } else { // failed to init server socket....try waiting a moment... sleep(2); } } } slog(LOG_DEBUG_VV, "Finished, and waiting to clean everything up\n"); sleep(1); if(tAddrInfo != NULL) { freeaddrinfo(tAddrInfo); } return 0; }