12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Decode and print Zephyr packets. 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * http://web.mit.edu/zephyr/doc/protocol 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 2001 Nickolai Zeldovich <kolya@MIT.EDU> 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * All rights reserved. 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that: (1) source code 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * distributions retain the above copyright notice and this paragraph 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * in its entirety, and (2) distributions including binary code include 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the above copyright notice and this paragraph in its entirety in 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the documentation or other materials provided with the distribution. 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * The name of the author(s) may not be used to endorse or promote 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * products derived from this software without specific prior written 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * PURPOSE. 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 2553f17a9db278d33517d9888dd77848f554522a38JP Abgrall "@(#) $Header: /tcpdump/master/tcpdump/print-zephyr.c,v 1.10 2007-08-09 18:47:27 hannes Exp $"; 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h" 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h> 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdlib.h> 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h" 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct z_packet { 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *version; 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int numfields; 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int kind; 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *uid; 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int port; 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int auth; 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int authlen; 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *authdata; 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *class; 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *inst; 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *opcode; 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *sender; 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *recipient; 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *format; 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int cksum; 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int multi; 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *multi_uid; 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Other fields follow here.. */ 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectenum z_packet_type { 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project Z_PACKET_UNSAFE = 0, 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project Z_PACKET_UNACKED, 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project Z_PACKET_ACKED, 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project Z_PACKET_HMACK, 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project Z_PACKET_HMCTL, 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project Z_PACKET_SERVACK, 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project Z_PACKET_SERVNAK, 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project Z_PACKET_CLIENTACK, 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project Z_PACKET_STAT 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok z_types[] = { 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { Z_PACKET_UNSAFE, "unsafe" }, 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { Z_PACKET_UNACKED, "unacked" }, 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { Z_PACKET_ACKED, "acked" }, 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { Z_PACKET_HMACK, "hm-ack" }, 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { Z_PACKET_HMCTL, "hm-ctl" }, 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { Z_PACKET_SERVACK, "serv-ack" }, 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { Z_PACKET_SERVNAK, "serv-nak" }, 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { Z_PACKET_CLIENTACK, "client-ack" }, 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { Z_PACKET_STAT, "stat" } 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectchar z_buf[256]; 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic char * 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectparse_field(char **pptr, int *len) 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *s; 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (*len <= 0 || !pptr || !*pptr) 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (*pptr > (char *) snapend) 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project s = *pptr; 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (*pptr <= (char *) snapend && *len >= 0 && **pptr) { 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (*pptr)++; 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (*len)--; 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (*pptr)++; 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (*len)--; 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (*len < 0 || *pptr > (char *) snapend) 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return s; 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char * 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectz_triple(char *class, char *inst, const char *recipient) 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!*recipient) 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project recipient = "*"; 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project snprintf(z_buf, sizeof(z_buf), "<%s,%s,%s>", class, inst, recipient); 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project z_buf[sizeof(z_buf)-1] = '\0'; 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return z_buf; 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char * 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstr_to_lower(char *string) 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project strncpy(z_buf, string, sizeof(z_buf)); 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project z_buf[sizeof(z_buf)-1] = '\0'; 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project string = z_buf; 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (*string) { 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *string = tolower((unsigned char)(*string)); 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project string++; 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return z_buf; 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectzephyr_print(const u_char *cp, int length) 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct z_packet z; 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *parse = (char *) cp; 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int parselen = length; 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *s; 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int lose = 0; 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14353f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* squelch compiler warnings */ 14453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 14553f17a9db278d33517d9888dd77848f554522a38JP Abgrall z.kind = 0; 14653f17a9db278d33517d9888dd77848f554522a38JP Abgrall z.class = 0; 14753f17a9db278d33517d9888dd77848f554522a38JP Abgrall z.inst = 0; 14853f17a9db278d33517d9888dd77848f554522a38JP Abgrall z.opcode = 0; 14953f17a9db278d33517d9888dd77848f554522a38JP Abgrall z.sender = 0; 15053f17a9db278d33517d9888dd77848f554522a38JP Abgrall z.recipient = 0; 15153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define PARSE_STRING \ 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project s = parse_field(&parse, &parselen); \ 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!s) lose = 1; 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define PARSE_FIELD_INT(field) \ 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_STRING \ 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!lose) field = strtol(s, 0, 16); 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define PARSE_FIELD_STR(field) \ 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_STRING \ 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!lose) field = s; 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(z.version); 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (lose) return; 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (strncmp(z.version, "ZEPH", 4)) 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_INT(z.numfields); 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_INT(z.kind); 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(z.uid); 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_INT(z.port); 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_INT(z.auth); 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_INT(z.authlen); 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(z.authdata); 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(z.class); 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(z.inst); 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(z.opcode); 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(z.sender); 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(z.recipient); 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(z.format); 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_INT(z.cksum); 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_INT(z.multi); 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(z.multi_uid); 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (lose) { 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|zephyr] (%d)", length); 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" zephyr"); 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (strncmp(z.version+4, "0.2", 3)) { 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" v%s", z.version+4); 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %s", tok2str(z_types, "type %d", z.kind)); 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (z.kind == Z_PACKET_SERVACK) { 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Initialization to silence warnings */ 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *ackdata = NULL; 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(ackdata); 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!lose && strcmp(ackdata, "SENT")) 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("/%s", str_to_lower(ackdata)); 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (*z.sender) printf(" %s", z.sender); 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.class, "USER_LOCATE")) { 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "USER_HIDE")) 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" hide"); 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (!strcmp(z.opcode, "USER_UNHIDE")) 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" unhide"); 2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" locate %s", z.inst); 2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.class, "ZEPHYR_ADMIN")) { 2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" zephyr-admin %s", str_to_lower(z.opcode)); 2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.class, "ZEPHYR_CTL")) { 2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.inst, "CLIENT")) { 2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "SUBSCRIBE") || 2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project !strcmp(z.opcode, "SUBSCRIBE_NODEFS") || 2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project !strcmp(z.opcode, "UNSUBSCRIBE")) { 2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %ssub%s", strcmp(z.opcode, "SUBSCRIBE") ? "un" : "", 2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project strcmp(z.opcode, "SUBSCRIBE_NODEFS") ? "" : 2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "-nodefs"); 2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (z.kind != Z_PACKET_SERVACK) { 2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Initialization to silence warnings */ 2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *c = NULL, *i = NULL, *r = NULL; 2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(c); 2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(i); 2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PARSE_FIELD_STR(r); 2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!lose) printf(" %s", z_triple(c, i, r)); 2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "GIMME")) { 2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" ret"); 2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "GIMMEDEFS")) { 2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" gimme-defs"); 2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "CLEARSUB")) { 2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" clear-subs"); 2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %s", str_to_lower(z.opcode)); 2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.inst, "HM")) { 2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %s", str_to_lower(z.opcode)); 2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.inst, "REALM")) { 2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "ADD_SUBSCRIBE")) 2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" realm add-subs"); 2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "REQ_SUBSCRIBE")) 2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" realm req-subs"); 2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "RLM_SUBSCRIBE")) 2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" realm rlm-sub"); 2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "RLM_UNSUBSCRIBE")) 2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" realm rlm-unsub"); 2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.class, "HM_CTL")) { 2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" hm_ctl %s", str_to_lower(z.inst)); 2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %s", str_to_lower(z.opcode)); 2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.class, "HM_STAT")) { 2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.inst, "HMST_CLIENT") && !strcmp(z.opcode, "GIMMESTATS")) { 2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" get-client-stats"); 2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.class, "WG_CTL")) { 2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" wg_ctl %s", str_to_lower(z.inst)); 2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %s", str_to_lower(z.opcode)); 2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.class, "LOGIN")) { 2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "USER_FLUSH")) { 3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" flush_locs"); 3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!strcmp(z.opcode, "NONE") || 3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project !strcmp(z.opcode, "OPSTAFF") || 3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project !strcmp(z.opcode, "REALM-VISIBLE") || 3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project !strcmp(z.opcode, "REALM-ANNOUNCED") || 3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project !strcmp(z.opcode, "NET-VISIBLE") || 3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project !strcmp(z.opcode, "NET-ANNOUNCED")) { 3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" set-exposure %s", str_to_lower(z.opcode)); 3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!*z.recipient) 3162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project z.recipient = "*"; 3172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" to %s", z_triple(z.class, z.inst, z.recipient)); 3192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (*z.opcode) 3202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" op %s", z.opcode); 3212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 323