/* special time limit stuff... */ int stimer() { int i, spk; static int clock3; g.foobar = g.foobar > 0 ? -g.foobar : 0; g.combo = g.combo > 0 ? -g.combo : 0; if (g.turns > 310 && g.abbnum != 10000 && !g.terse) rspeak(273); /* Bump all the right clocks for reconning battery life and closing */ if (g.closed) { clock3--; if (clock3 == 0) { g.prop[PHONE] = 0; g.prop[BOOTH] = 0; rspeak(284); } else if (clock3 < -7) { rspeak(254); normend(); return (TRUE); } } if (g.tally == 0 && inside(g.loc) && g.loc != Y2) --g.clock; if (g.clock == 0) { /* Start closing the cave */ g.prop[GRATE] = 0; biton(GRATE, LOCKBT); bitoff(GRATE, OPENBT); g.prop[FISSURE] = 0; g.prop[TDOOR] = 0; biton(TDOOR, LOCKBT); bitoff(TDOOR, OPENBT); g.prop[TDOOR2] = 0; biton(TDOOR2, LOCKBT); bitoff(TDOOR2, OPENBT); for (i = 1; i <= DWARFMAX; ++i) { g.dseen[i] = FALSE; g.dloc[i] = 0; } move(TROLL, 0); move((TROLL + MAXOBJ), 0); move(TROLL2, plac[TROLL]); move((TROLL2 + MAXOBJ), fixd[TROLL]); juggle(CHASM); if (g.prop[BEAR] != 3) destroy(BEAR); g.prop[CHAIN] = 0; g.fixed[CHAIN] = 0; g.prop[AXE] = 0; g.fixed[AXE] = 0; rspeak(129); g.clock = -1; g.closing = TRUE; return (FALSE); } if (g.clock < 0) --g.clock2; if (g.clock2 == 0) { /* Set up storage room... and close the cave... */ g.prop[BOTTLE] = put(BOTTLE, 115, 8); g.holder[BOTTLE] = WATER; g.place[WATER] = -BOTTLE; g.hlink[WATER] = 0; bitoff(BOTTLE, OPENBT); g.prop[PLANT] = put(PLANT, 115, 0); g.prop[OYSTER] = put(OYSTER, 115, 0); g.prop[LAMP] = put(LAMP, 115, 0); g.prop[ROD] = put(ROD, 115, 0); g.prop[DWARF] = put(DWARF, 115, 0); g.loc = 115; g.oldloc = 115; g.newloc = 115; /* Leave the grate with normal (non-negative property). */ put(GRATE, 116, 0); biton(GRATE, LOCKBT); bitoff(GRATE, OPENBT); g.prop[SNAKE] = put(SNAKE, 116, 1); g.prop[BIRD] = put(BIRD, 116, 1); g.prop[CAGE] = put(CAGE, 116, 0); g.prop[ROD2] = put(ROD2, 116, 0); g.prop[PILLOW] = put(PILLOW, 116, 0); g.prop[BOOTH] = put(BOOTH, 116, -3); g.fixed[BOOTH] = 115; g.prop[PHONE] = put(PHONE, 212, -4); g.prop[MIRROR] = put(MIRROR, 115, 0); g.fixed[MIRROR] = 116; g.prop[BOOK2] = put(BOOK2, 115, 0); for (i = 1; i < MAXOBJ; ++i) { if (toting(i) && enclosed(i)) extract(i); if (toting(i)) destroy(i); } rspeak(132); g.closed = TRUE; clock3 = 20 + ranz(20); newtravel = TRUE; return (TRUE); } if (g.prop[LAMP] == 1) --g.limit; if (g.limit == 0) { --g.limit; g.prop[LAMP] = 0; if (here(LAMP)) rspeak(184); return (FALSE); } if (g.limit < 0 && outside(g.loc)) { rspeak(185); normend(); return (TRUE); } if (g.limit <= 40) { if (g.lmwarn || !here(LAMP)) return (FALSE); g.lmwarn = TRUE; spk = 187; if (g.prop[BATTERIES] == 1) spk = 323; if (g.place[BATTERIES] == 0) spk = 183; if (g.prop[VEND] == 1) spk = 189; rspeak(spk); return (FALSE); } return (FALSE); }
int main(int argc, char *argv[]) { srvr_sockaddr_union_t me; curl_socket_t sock = CURL_SOCKET_BAD; curl_socket_t msgsock = CURL_SOCKET_BAD; int wrotepidfile = 0; char *pidname= (char *)".sockfilt.pid"; bool juggle_again; int rc; int error; int arg=1; enum sockmode mode = PASSIVE_LISTEN; /* default */ const char *addr = NULL; while(argc>arg) { if(!strcmp("--version", argv[arg])) { printf("sockfilt IPv4%s\n", #ifdef ENABLE_IPV6 "/IPv6" #else "" #endif ); return 0; } else if(!strcmp("--verbose", argv[arg])) { verbose = TRUE; arg++; } else if(!strcmp("--pidfile", argv[arg])) { arg++; if(argc>arg) pidname = argv[arg++]; } else if(!strcmp("--logfile", argv[arg])) { arg++; if(argc>arg) serverlogfile = argv[arg++]; } else if(!strcmp("--ipv6", argv[arg])) { #ifdef ENABLE_IPV6 ipv_inuse = "IPv6"; use_ipv6 = TRUE; #endif arg++; } else if(!strcmp("--ipv4", argv[arg])) { /* for completeness, we support this option as well */ #ifdef ENABLE_IPV6 ipv_inuse = "IPv4"; use_ipv6 = FALSE; #endif arg++; } else if(!strcmp("--bindonly", argv[arg])) { bind_only = TRUE; arg++; } else if(!strcmp("--port", argv[arg])) { arg++; if(argc>arg) { char *endptr; unsigned long ulnum = strtoul(argv[arg], &endptr, 10); if((endptr != argv[arg] + strlen(argv[arg])) || ((ulnum != 0UL) && ((ulnum < 1025UL) || (ulnum > 65535UL)))) { fprintf(stderr, "sockfilt: invalid --port argument (%s)\n", argv[arg]); return 0; } port = curlx_ultous(ulnum); arg++; } } else if(!strcmp("--connect", argv[arg])) { /* Asked to actively connect to the specified local port instead of doing a passive server-style listening. */ arg++; if(argc>arg) { char *endptr; unsigned long ulnum = strtoul(argv[arg], &endptr, 10); if((endptr != argv[arg] + strlen(argv[arg])) || (ulnum < 1025UL) || (ulnum > 65535UL)) { fprintf(stderr, "sockfilt: invalid --connect argument (%s)\n", argv[arg]); return 0; } connectport = curlx_ultous(ulnum); arg++; } } else if(!strcmp("--addr", argv[arg])) { /* Set an IP address to use with --connect; otherwise use localhost */ arg++; if(argc>arg) { addr = argv[arg]; arg++; } } else { puts("Usage: sockfilt [option]\n" " --version\n" " --verbose\n" " --logfile [file]\n" " --pidfile [file]\n" " --ipv4\n" " --ipv6\n" " --bindonly\n" " --port [port]\n" " --connect [port]\n" " --addr [address]"); return 0; } } #ifdef WIN32 win32_init(); atexit(win32_cleanup); setmode(fileno(stdin), O_BINARY); setmode(fileno(stdout), O_BINARY); setmode(fileno(stderr), O_BINARY); #endif install_signal_handlers(); #ifdef ENABLE_IPV6 if(!use_ipv6) #endif sock = socket(AF_INET, SOCK_STREAM, 0); #ifdef ENABLE_IPV6 else sock = socket(AF_INET6, SOCK_STREAM, 0); #endif if(CURL_SOCKET_BAD == sock) { error = SOCKERRNO; logmsg("Error creating socket: (%d) %s", error, strerror(error)); write_stdout("FAIL\n", 5); goto sockfilt_cleanup; } if(connectport) { /* Active mode, we should connect to the given port number */ mode = ACTIVE; #ifdef ENABLE_IPV6 if(!use_ipv6) { #endif memset(&me.sa4, 0, sizeof(me.sa4)); me.sa4.sin_family = AF_INET; me.sa4.sin_port = htons(connectport); me.sa4.sin_addr.s_addr = INADDR_ANY; if (!addr) addr = "127.0.0.1"; Curl_inet_pton(AF_INET, addr, &me.sa4.sin_addr); rc = connect(sock, &me.sa, sizeof(me.sa4)); #ifdef ENABLE_IPV6 } else { memset(&me.sa6, 0, sizeof(me.sa6)); me.sa6.sin6_family = AF_INET6; me.sa6.sin6_port = htons(connectport); if (!addr) addr = "::1"; Curl_inet_pton(AF_INET6, addr, &me.sa6.sin6_addr); rc = connect(sock, &me.sa, sizeof(me.sa6)); } #endif /* ENABLE_IPV6 */ if(rc) { error = SOCKERRNO; logmsg("Error connecting to port %hu: (%d) %s", connectport, error, strerror(error)); write_stdout("FAIL\n", 5); goto sockfilt_cleanup; } logmsg("====> Client connect"); msgsock = sock; /* use this as stream */ } else { /* passive daemon style */ sock = sockdaemon(sock, &port); if(CURL_SOCKET_BAD == sock) { write_stdout("FAIL\n", 5); goto sockfilt_cleanup; } msgsock = CURL_SOCKET_BAD; /* no stream socket yet */ } logmsg("Running %s version", ipv_inuse); if(connectport) logmsg("Connected to port %hu", connectport); else if(bind_only) logmsg("Bound without listening on port %hu", port); else logmsg("Listening on port %hu", port); wrotepidfile = write_pidfile(pidname); if(!wrotepidfile) { write_stdout("FAIL\n", 5); goto sockfilt_cleanup; } do { juggle_again = juggle(&msgsock, sock, &mode); } while(juggle_again); sockfilt_cleanup: if((msgsock != sock) && (msgsock != CURL_SOCKET_BAD)) sclose(msgsock); if(sock != CURL_SOCKET_BAD) sclose(sock); if(wrotepidfile) unlink(pidname); restore_signal_handlers(); if(got_exit_signal) { logmsg("============> sockfilt exits with signal (%d)", exit_signal); /* * To properly set the return status of the process we * must raise the same signal SIGINT or SIGTERM that we * caught and let the old handler take care of it. */ raise(exit_signal); } logmsg("============> sockfilt quits"); return 0; }
/* THROW etc. */ vthrow() { int msg; int i; if (toting(ROD2) && object == ROD && !toting(ROD)) object = ROD2; if (!toting(object)) { actspk(verb); return; } /* treasure to troll */ if (at(TROLL) && object >= 50 && object<MAXOBJ) { rspeak(159); drop(object,0); move(TROLL,0); move((TROLL+MAXOBJ),0); drop(TROLL2,117); drop((TROLL2+MAXOBJ),122); juggle(CHASM); return; } /* feed the bears... */ if (object == FOOD && here(BEAR)) { object = BEAR; vfeed(); return; } /* if not axe, same as drop... */ if (object != AXE) { vdrop(); return; } /* AXE is THROWN */ /* at a dwarf... */ if (i = dcheck()) { msg = 48; if (pct(33)) { dseen[i] = dloc[i] = 0; msg = 47; ++dkill; if (dkill == 1) msg = 149; } } /* at a dragon... */ else if (at(DRAGON) && prop[DRAGON] == 0) msg = 152; /* at the troll... */ else if (at(TROLL)) msg = 158; /* at the bear... */ else if (here(BEAR) && prop[BEAR] == 0) { rspeak(164); drop(AXE,loc); fixed[AXE] = -1; prop[AXE] = 1; juggle(BEAR); return; } /* otherwise it is an attack */ else { verb = KILL; object = 0; itverb(); return; } /* handle the left over axe... */ rspeak(msg); drop(AXE,loc); describe(); }
/* DROP etc. */ vdrop() { int i; /* check for dynamite */ if (toting(ROD2) && object == ROD && !toting(ROD)) object = ROD2; if (!toting(object)){ actspk(verb); return; } /* snake and bird */ if (object == BIRD && here(SNAKE)) { rspeak(30); if (closed) dwarfend(); dstroy(SNAKE); prop[SNAKE] = -1; } /* coins and vending machine */ else if (object == COINS && here(VEND)) { dstroy(COINS); drop(BATTERIES,loc); pspeak(BATTERIES,0); return; } /* bird and dragon (ouch!!) */ else if (object == BIRD && at(DRAGON) && prop[DRAGON] == 0){ rspeak(154); dstroy(BIRD); prop[BIRD] = 0; if (place[SNAKE] != 0) ++tally2; return; } /* Bear and troll */ if (object == BEAR && at(TROLL)) { rspeak(163); move(TROLL,0); move((TROLL+MAXOBJ),0); move(TROLL2,117); move((TROLL2+MAXOBJ),122); juggle(CHASM); prop[TROLL] = 2; } /* vase */ else if (object == VASE) { if (loc == 96) rspeak(54); else { prop[VASE] = at(PILLOW) ? 0 : 2; pspeak(VASE,prop[VASE]+1); if (prop[VASE] != 0) fixed[VASE] = -1; } } /* handle liquid and bottle */ i = liq(); if (i == object) object = BOTTLE; if (object == BOTTLE && i != 0) place[i] = 0; /* handle bird and cage */ if (object == CAGE && prop[BIRD] != 0) drop(BIRD,loc); if (object == BIRD) prop[BIRD] = 0; drop(object,loc); }
int main(int argc, char *argv[]) { struct timespec juggle_results[LOOPS], process_results[LOOPS]; struct timespec thread_results[LOOPS]; int fd1, fd2, i, j, p; struct utsname uts; printf("version, juggle.c %s\n", "$FreeBSD: releng/10.1/tools/tools/netrate/juggle/juggle.c 213574 2010-10-08 14:31:49Z pluknet $"); if (uname(&uts) < 0) err(-1, "utsname"); printf("sysname, %s\n", uts.sysname); printf("nodename, %s\n", uts.nodename); printf("release, %s\n", uts.release); printf("version, %s\n", uts.version); printf("machine, %s\n", uts.machine); printf("\n"); printf("MESSAGELEN, %d\n", MESSAGELEN); printf("NUMCYCLES, %d\n", NUMCYCLES); printf("LOOPS, %d\n", LOOPS); printf("PIPELINE_MAX, %d\n", PIPELINE_MAX); printf("\n\n"); printf("ipctype, test, pipeline_depth"); for (j = 0; j < LOOPS; j++) printf(", data%d", j); printf("\n"); fflush(stdout); for (p = 0; p < PIPELINE_MAX + 1; p++) { for (i = 0; i < ipctypes_len; i++) { if (ipctypes[i].it_create(&fd1, &fd2) < 0) err(-1, "main: %s", ipctypes[i].it_name); /* * For each test, do one uncounted warmup, then LOOPS * runs of the actual test. */ juggle(fd1, fd2, p); for (j = 0; j < LOOPS; j++) juggle_results[j] = juggle(fd1, fd2, p); process_juggle(fd1, fd2, p); for (j = 0; j < LOOPS; j++) process_results[j] = process_juggle(fd1, fd2, p); thread_juggle(fd1, fd2, p); for (j = 0; j < LOOPS; j++) thread_results[j] = thread_juggle(fd1, fd2, p); for (j = 0; j < LOOPS; j++) { thread_results[j].tv_sec = 0; thread_results[j].tv_nsec = 0; } close(fd1); close(fd2); } /* * When printing results for the round, normalize the results * with respect to the pipeline depth. We're doing p times * as much work, and are we taking p times as long? */ for (i = 0; i < ipctypes_len; i++) { printf("%s, juggle, %d, ", ipctypes[i].it_name, p); for (j = 0; j < LOOPS; j++) { if (j != 0) printf(", "); scale_timespec(&juggle_results[j], p); printf("%jd.%09lu", (intmax_t)juggle_results[j].tv_sec, juggle_results[j].tv_nsec); } printf("\n"); printf("%s, process_juggle, %d, ", ipctypes[i].it_name, p); for (j = 0; j < LOOPS; j++) { if (j != 0) printf(", "); scale_timespec(&process_results[j], p); printf("%jd.%09lu", (intmax_t)process_results[j].tv_sec, process_results[j].tv_nsec); } printf("\n"); printf("%s, thread_juggle, %d, ", ipctypes[i].it_name, p); for (j = 0; j < LOOPS; j++) { if (j != 0) printf(", "); scale_timespec(&thread_results[j], p); printf("%jd.%09lu", (intmax_t)thread_results[j].tv_sec, thread_results[j].tv_nsec); } printf("\n"); } fflush(stdout); } return (0); }
int main(int argc, char **argv) { int n_levels; int ret; int i, rep; int misbehave_num; if (argc != 5) { printf("Wrong number of args.\n\n"); print_usage(argv[0]); return -1; } n_levels = atoi(argv[1]); n_throws = atoi(argv[2]); rep = atoi(argv[3]); misbehave_num = atoi(argv[4]) - 1; if (n_levels < 0) { printf("Levels must be non-negative.\n\n"); print_usage(argv[0]); return -1; } if (n_throws < 0) { printf("Throws must be non-negative.\n\n"); print_usage(argv[0]); return -1; } if (thr_init(4096) != 0) { printf("Init failed. Something's busted.\n\n"); return -10; } printf("MISBEHAVE: %d\n\n", misbehave_num); misbehave(misbehave_num); if (mutex_init(&count_mutex) != 0) { printf("Mutex init of count_mutex failed. Go fix your mutexes.\n\n"); return -20; } for (i = 0; rep == 0 || i < rep; i++) { printf("Here we go! Repetition %d\n", i+1); if ((ret = (int)juggle((void *)n_levels)) != n_levels) { printf("Root juggle thread returned wrong value: %d should've been: %d\n", ret, n_levels); return -2; } printf("\n\nSuccess. All balls accounted for.\n"); #ifdef COUNT_THREADS lprintf("Created and destroyed %d threads so far.\n", th_count); #endif } thr_exit(0); printf("This is NOT happening!\n"); return -30; }
int main(int argc, char *argv[]) { struct sockaddr_in me; #ifdef ENABLE_IPV6 struct sockaddr_in6 me6; #endif /* ENABLE_IPV6 */ int sock; int msgsock = CURL_SOCKET_BAD; /* no stream socket yet */ int flag; FILE *pidfile; char *pidname= (char *)".sockfilt.pid"; int rc; int arg=1; bool ok = FALSE; enum sockmode mode = PASSIVE_LISTEN; /* default */ while(argc>arg) { if(!strcmp("--version", argv[arg])) { printf("sockfilt IPv4%s\n", #ifdef ENABLE_IPV6 "/IPv6" #else "" #endif ); return 0; } else if(!strcmp("--pidfile", argv[arg])) { arg++; if(argc>arg) pidname = argv[arg++]; } else if(!strcmp("--logfile", argv[arg])) { arg++; if(argc>arg) serverlogfile = argv[arg++]; } else if(!strcmp("--ipv6", argv[arg])) { #ifdef ENABLE_IPV6 use_ipv6=TRUE; #endif arg++; } else if(!strcmp("--ipv4", argv[arg])) { /* for completeness, we support this option as well */ use_ipv6=FALSE; arg++; } else if(!strcmp("--port", argv[arg])) { arg++; if(argc>arg) { port = (unsigned short)atoi(argv[arg]); arg++; } } else if(!strcmp("--connect", argv[arg])) { /* Asked to actively connect to the specified local port instead of doing a passive server-style listening. */ arg++; if(argc>arg) { connectport = (unsigned short)atoi(argv[arg]); arg++; } } else { puts("Usage: sockfilt [option]\n" " --version\n" " --logfile [file]\n" " --pidfile [file]\n" " --ipv4\n" " --ipv6\n" " --port [port]"); return 0; } } #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) win32_init(); atexit(win32_cleanup); #else #ifdef SIGPIPE #ifdef HAVE_SIGNAL signal(SIGPIPE, sigpipe_handler); #endif #ifdef HAVE_SIGINTERRUPT siginterrupt(SIGPIPE, 1); #endif #endif #endif #ifdef ENABLE_IPV6 if(!use_ipv6) #endif sock = socket(AF_INET, SOCK_STREAM, 0); #ifdef ENABLE_IPV6 else sock = socket(AF_INET6, SOCK_STREAM, 0); #endif if (sock < 0) { perror("opening stream socket"); logmsg("Error opening socket"); return 1; } if(connectport) { /* Active mode, we should connect to the given port number */ mode = ACTIVE; #ifdef ENABLE_IPV6 if(!use_ipv6) { #endif memset(&me, 0, sizeof(me)); me.sin_family = AF_INET; me.sin_port = htons(connectport); me.sin_addr.s_addr = INADDR_ANY; Curl_inet_pton(AF_INET, "127.0.0.1", &me.sin_addr); rc = connect(sock, (struct sockaddr *) &me, sizeof(me)); #ifdef ENABLE_IPV6 } else { memset(&me6, 0, sizeof(me6)); me6.sin6_family = AF_INET6; me6.sin6_port = htons(connectport); Curl_inet_pton(AF_INET6, "::1", &me6.sin6_addr); rc = connect(sock, (struct sockaddr *) &me6, sizeof(me6)); } #endif /* ENABLE_IPV6 */ if(rc) { perror("connecting stream socket"); logmsg("Error connecting to port %d", port); return 1; } logmsg("====> Client connect"); msgsock = sock; /* use this as stream */ } else { /* passive daemon style */ flag = 1; if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, (const void *) &flag, sizeof(int)) < 0) { perror("setsockopt(SO_REUSEADDR)"); } #ifdef ENABLE_IPV6 if(!use_ipv6) { #endif me.sin_family = AF_INET; me.sin_addr.s_addr = INADDR_ANY; me.sin_port = htons(port); rc = bind(sock, (struct sockaddr *) &me, sizeof(me)); #ifdef ENABLE_IPV6 } else { memset(&me6, 0, sizeof(struct sockaddr_in6)); me6.sin6_family = AF_INET6; me6.sin6_addr = in6addr_any; me6.sin6_port = htons(port); rc = bind(sock, (struct sockaddr *) &me6, sizeof(me6)); } #endif /* ENABLE_IPV6 */ if(rc < 0) { perror("binding stream socket"); logmsg("Error binding socket"); return 1; } if(!port) { /* The system picked a port number, now figure out which port we actually got */ /* we succeeded to bind */ struct sockaddr_in add; socklen_t socksize = sizeof(add); if(getsockname(sock, (struct sockaddr *) &add, &socksize)<0) { fprintf(stderr, "getsockname() failed"); return 1; } port = ntohs(add.sin_port); } /* start accepting connections */ listen(sock, 1); } logmsg("Running IPv%d version", (use_ipv6?6:4)); if(connectport) logmsg("Connected to port %d", connectport); else logmsg("Listening on port %d", port); pidfile = fopen(pidname, "w"); if(pidfile) { int pid = (int)getpid(); fprintf(pidfile, "%d\n", pid); fclose(pidfile); logmsg("Wrote pid %d to %s", pid, pidname); } else fprintf(stderr, "Couldn't write pid file\n"); do { ok = juggle(&msgsock, sock, &mode); } while(ok); sclose(sock); return 0; }