summaryrefslogtreecommitdiff
path: root/third_party/uip-1.0/doc/html/a00176.html
blob: 2385ff0322e3f9464990beecf6d99d1e7889ce67 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>uIP 1.0: apps/telnetd/shell.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.6 -->
<div class="tabs">
  <ul>
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="modules.html"><span>Modules</span></a></li>
    <li><a href="classes.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="examples.html"><span>Examples</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    <li><a href="globals.html"><span>Globals</span></a></li>
  </ul></div>
<h1>apps/telnetd/shell.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001  <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2003, Adam Dunkels.</span>
<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
<a name="l00004"></a>00004 <span class="comment"> *</span>
<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions</span>
<a name="l00007"></a>00007 <span class="comment"> * are met:</span>
<a name="l00008"></a>00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
<a name="l00009"></a>00009 <span class="comment"> *    notice, this list of conditions and the following disclaimer.</span>
<a name="l00010"></a>00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
<a name="l00011"></a>00011 <span class="comment"> *    notice, this list of conditions and the following disclaimer in the</span>
<a name="l00012"></a>00012 <span class="comment"> *    documentation and/or other materials provided with the distribution.</span>
<a name="l00013"></a>00013 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
<a name="l00014"></a>00014 <span class="comment"> *    products derived from this software without specific prior</span>
<a name="l00015"></a>00015 <span class="comment"> *    written permission.</span>
<a name="l00016"></a>00016 <span class="comment"> *</span>
<a name="l00017"></a>00017 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
<a name="l00018"></a>00018 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
<a name="l00019"></a>00019 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
<a name="l00020"></a>00020 <span class="comment"> * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
<a name="l00021"></a>00021 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
<a name="l00022"></a>00022 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
<a name="l00023"></a>00023 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
<a name="l00024"></a>00024 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
<a name="l00025"></a>00025 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
<a name="l00026"></a>00026 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
<a name="l00027"></a>00027 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
<a name="l00028"></a>00028 <span class="comment"> *</span>
<a name="l00029"></a>00029 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
<a name="l00030"></a>00030 <span class="comment"> *</span>
<a name="l00031"></a>00031 <span class="comment"> * $Id: shell.c,v 1.1 2006/06/07 09:43:54 adam Exp $</span>
<a name="l00032"></a>00032 <span class="comment"> *</span>
<a name="l00033"></a>00033 <span class="comment"> */</span>
<a name="l00034"></a>00034 
<a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="a00107.html">shell.h</a>"</span>
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00038"></a>00038 
<a name="l00039"></a>00039 <span class="keyword">struct </span>ptentry {
<a name="l00040"></a>00040   <span class="keywordtype">char</span> *commandstr;
<a name="l00041"></a>00041   void (* pfunc)(<span class="keywordtype">char</span> *str);
<a name="l00042"></a>00042 };
<a name="l00043"></a>00043 
<a name="l00044"></a>00044 <span class="preprocessor">#define SHELL_PROMPT "uIP 1.0&gt; "</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span>
<a name="l00046"></a>00046 <span class="comment">/*---------------------------------------------------------------------------*/</span>
<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00048"></a>00048 parse(<span class="keyword">register</span> <span class="keywordtype">char</span> *str, <span class="keyword">struct</span> ptentry *t)
<a name="l00049"></a>00049 {
<a name="l00050"></a>00050   <span class="keyword">struct </span>ptentry *p;
<a name="l00051"></a>00051   <span class="keywordflow">for</span>(p = t; p-&gt;commandstr != <a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>; ++p) {
<a name="l00052"></a>00052     <span class="keywordflow">if</span>(strncmp(p-&gt;commandstr, str, strlen(p-&gt;commandstr)) == 0) {
<a name="l00053"></a>00053       <span class="keywordflow">break</span>;
<a name="l00054"></a>00054     }
<a name="l00055"></a>00055   }
<a name="l00056"></a>00056 
<a name="l00057"></a>00057   p-&gt;pfunc(str);
<a name="l00058"></a>00058 }
<a name="l00059"></a>00059 <span class="comment">/*---------------------------------------------------------------------------*/</span>
<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00061"></a>00061 inttostr(<span class="keyword">register</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)
<a name="l00062"></a>00062 {
<a name="l00063"></a>00063   str[0] = <span class="charliteral">'0'</span> + i / 100;
<a name="l00064"></a>00064   <span class="keywordflow">if</span>(str[0] == <span class="charliteral">'0'</span>) {
<a name="l00065"></a>00065     str[0] = <span class="charliteral">' '</span>;
<a name="l00066"></a>00066   }
<a name="l00067"></a>00067   str[1] = <span class="charliteral">'0'</span> + (i / 10) % 10;
<a name="l00068"></a>00068   <span class="keywordflow">if</span>(str[0] == <span class="charliteral">' '</span> &amp;&amp; str[1] == <span class="charliteral">'0'</span>) {
<a name="l00069"></a>00069     str[1] = <span class="charliteral">' '</span>;
<a name="l00070"></a>00070   }
<a name="l00071"></a>00071   str[2] = <span class="charliteral">'0'</span> + i % 10;
<a name="l00072"></a>00072   str[3] = <span class="charliteral">' '</span>;
<a name="l00073"></a>00073   str[4] = 0;
<a name="l00074"></a>00074 }
<a name="l00075"></a>00075 <span class="comment">/*---------------------------------------------------------------------------*/</span>
<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00077"></a>00077 help(<span class="keywordtype">char</span> *str)
<a name="l00078"></a>00078 {
<a name="l00079"></a>00079   shell_output(<span class="stringliteral">"Available commands:"</span>, <span class="stringliteral">""</span>);
<a name="l00080"></a>00080   shell_output(<span class="stringliteral">"stats   - show network statistics"</span>, <span class="stringliteral">""</span>);
<a name="l00081"></a>00081   shell_output(<span class="stringliteral">"conn    - show TCP connections"</span>, <span class="stringliteral">""</span>);
<a name="l00082"></a>00082   shell_output(<span class="stringliteral">"help, ? - show help"</span>, <span class="stringliteral">""</span>);
<a name="l00083"></a>00083   shell_output(<span class="stringliteral">"exit    - exit shell"</span>, <span class="stringliteral">""</span>);
<a name="l00084"></a>00084 }
<a name="l00085"></a>00085 <span class="comment">/*---------------------------------------------------------------------------*/</span>
<a name="l00086"></a>00086 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00087"></a>00087 unknown(<span class="keywordtype">char</span> *str)
<a name="l00088"></a>00088 {
<a name="l00089"></a>00089   <span class="keywordflow">if</span>(strlen(str) &gt; 0) {
<a name="l00090"></a>00090     shell_output(<span class="stringliteral">"Unknown command: "</span>, str);
<a name="l00091"></a>00091   }
<a name="l00092"></a>00092 }
<a name="l00093"></a>00093 <span class="comment">/*---------------------------------------------------------------------------*/</span>
<a name="l00094"></a>00094 <span class="keyword">static</span> <span class="keyword">struct </span>ptentry parsetab[] =
<a name="l00095"></a>00095   {{<span class="stringliteral">"stats"</span>, help},
<a name="l00096"></a>00096    {<span class="stringliteral">"conn"</span>, help},
<a name="l00097"></a>00097    {<span class="stringliteral">"help"</span>, help},
<a name="l00098"></a>00098    {<span class="stringliteral">"exit"</span>, shell_quit},
<a name="l00099"></a>00099    {<span class="stringliteral">"?"</span>, help},
<a name="l00100"></a>00100 
<a name="l00101"></a>00101    <span class="comment">/* Default action */</span>
<a name="l00102"></a>00102    {<a class="code" href="a00160.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, unknown}};
<a name="l00103"></a>00103 <span class="comment">/*---------------------------------------------------------------------------*/</span>
<a name="l00104"></a>00104 <span class="keywordtype">void</span>
<a name="l00105"></a><a class="code" href="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02">00105</a> <a class="code" href="a00107.html#69b075ef7e4d7bcf5a903d3d75baac02">shell_init</a>(<span class="keywordtype">void</span>)
<a name="l00106"></a>00106 {
<a name="l00107"></a>00107 }
<a name="l00108"></a>00108 <span class="comment">/*---------------------------------------------------------------------------*/</span>
<a name="l00109"></a>00109 <span class="keywordtype">void</span>
<a name="l00110"></a><a class="code" href="a00107.html#d1f18f739da7703628c3663209463a0d">00110</a> <a class="code" href="a00107.html#d1f18f739da7703628c3663209463a0d">shell_start</a>(<span class="keywordtype">void</span>)
<a name="l00111"></a>00111 {
<a name="l00112"></a>00112   shell_output(<span class="stringliteral">"uIP command shell"</span>, <span class="stringliteral">""</span>);
<a name="l00113"></a>00113   shell_output(<span class="stringliteral">"Type '?' and return for help"</span>, <span class="stringliteral">""</span>);
<a name="l00114"></a>00114   shell_prompt(SHELL_PROMPT);
<a name="l00115"></a>00115 }
<a name="l00116"></a>00116 <span class="comment">/*---------------------------------------------------------------------------*/</span>
<a name="l00117"></a>00117 <span class="keywordtype">void</span>
<a name="l00118"></a><a class="code" href="a00107.html#86beee1f69d05b16022dfb430470e9ce">00118</a> <a class="code" href="a00107.html#86beee1f69d05b16022dfb430470e9ce">shell_input</a>(<span class="keywordtype">char</span> *cmd)
<a name="l00119"></a>00119 {
<a name="l00120"></a>00120   parse(cmd, parsetab);
<a name="l00121"></a>00121   shell_prompt(SHELL_PROMPT);
<a name="l00122"></a>00122 }
<a name="l00123"></a>00123 <span class="comment">/*---------------------------------------------------------------------------*/</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
</body>
</html>