home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _2c5f682724ac2283819ca3323ff43c3a < prev    next >
Text File  |  2000-03-23  |  60KB  |  1,299 lines

  1.  
  2. <HTML>
  3. <HEAD>
  4. <TITLE>Net::Telnet - interact with TELNET port or other TCP ports</TITLE>
  5. <LINK REL="stylesheet" HREF="../../../Active.css" TYPE="text/css">
  6. <LINK REV="made" HREF="mailto:">
  7. </HEAD>
  8.  
  9. <BODY>
  10. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  11. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  12. <STRONG><P CLASS=block> Net::Telnet - interact with TELNET port or other TCP ports</P></STRONG>
  13. </TD></TR>
  14. </TABLE>
  15.  
  16. <A NAME="__index__"></A>
  17. <!-- INDEX BEGIN -->
  18.  
  19. <UL>
  20.  
  21.     <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
  22.  
  23.     <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  24.     <LI><A HREF="#description">DESCRIPTION</A></LI>
  25.     <UL>
  26.  
  27.         <LI><A HREF="#what to know before using">What To Know Before Using</A></LI>
  28.         <LI><A HREF="#debugging">Debugging</A></LI>
  29.         <LI><A HREF="#style of named parameters">Style of Named Parameters</A></LI>
  30.         <LI><A HREF="#connecting to a remote win32 machine">Connecting to a Remote Win32 Machine</A></LI>
  31.     </UL>
  32.  
  33.     <LI><A HREF="#methods">METHODS</A></LI>
  34.     <LI><A HREF="#see also">SEE ALSO</A></LI>
  35.     <LI><A HREF="#examples">EXAMPLES</A></LI>
  36.     <LI><A HREF="#author">AUTHOR</A></LI>
  37.     <LI><A HREF="#copyright">COPYRIGHT</A></LI>
  38. </UL>
  39. <!-- INDEX END -->
  40.  
  41. <HR>
  42. <P>
  43. <H1><A NAME="name">NAME</A></H1>
  44. <P>Net::Telnet - interact with TELNET port or other TCP ports</P>
  45. <P>
  46. <HR>
  47. <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
  48. <UL>
  49. <LI>Linux</LI>
  50. <LI>Solaris</LI>
  51. <LI>Windows</LI>
  52. </UL>
  53. <HR>
  54. <H1><A NAME="synopsis">SYNOPSIS</A></H1>
  55. <P><CODE>use Net::Telnet ();</CODE></P>
  56. <P>see METHODS section below</P>
  57. <P>
  58. <HR>
  59. <H1><A NAME="description">DESCRIPTION</A></H1>
  60. <P>Net::Telnet allows you to make client connections to a TCP port and do
  61. network I/O, especially to a port using the TELNET protocol.  Simple
  62. I/O methods such as print, get, and getline are provided.  More
  63. sophisticated interactive features are provided because connecting to
  64. a TELNET port ultimately means communicating with a program designed
  65. for human interaction.  These interactive features include the ability
  66. to specify a timeout and to wait for patterns to appear in the input
  67. stream, such as the prompt from a shell.</P>
  68. <P>Other reasons to use this module than strictly with a TELNET port are:</P>
  69. <UL>
  70. <LI>
  71. You're not familiar with sockets and you want a simple way to make
  72. client connections to TCP services.
  73. <P></P>
  74. <LI>
  75. You want to be able to specify your own time-out while connecting,
  76. reading, or writing.
  77. <P></P>
  78. <LI>
  79. You're communicating with an interactive program at the other end of
  80. some socket or pipe and you want to wait for certain patterns to
  81. appear.
  82. <P></P></UL>
  83. <P>Here's an example that prints who's logged-on to the remote host
  84. sparky.  In addition to a username and password, you must also know
  85. the user's shell prompt, which for this example is <CODE>bash$</CODE></P>
  86. <PRE>
  87.     use Net::Telnet ();
  88.     $t = new Net::Telnet (Timeout => 10,
  89.                           Prompt => '/bash\$ $/');
  90.     $t->open("sparky");
  91.     $t->login($username, $passwd);
  92.     @lines = $t->cmd("/usr/bin/who");
  93.     print @lines;</PRE>
  94. <P>More examples are in the <STRONG>EXAMPLES</STRONG> section below.</P>
  95. <P>
  96. <H2><A NAME="what to know before using">What To Know Before Using</A></H2>
  97. <UL>
  98. <LI>
  99. All output is flushed while all input is buffered.  Each object
  100. contains an input buffer.
  101. <P></P>
  102. <LI>
  103. The output record separator for <A HREF="../../../lib/Pod/perlfunc.html#item_print"><CODE>print()</CODE></A> and <CODE>cmd()</CODE> is set to
  104. <CODE>"\n"</CODE> by default, so that you don't have to append all your commands
  105. with a newline.  See <A HREF="../../../lib/Pod/perlvar.html#item_output_record_separator"><CODE>output_record_separator()</CODE></A> to change the
  106. behavior.
  107. <P></P>
  108. <LI>
  109. The methods <CODE>login()</CODE> and <CODE>cmd()</CODE> use the <EM>prompt</EM> setting in the
  110. object to determine when a login or remote command is complete.  The
  111. method will fail with a time-out if you don't set the prompt
  112. correctly.
  113. <P></P>
  114. <LI>
  115. To avoid unexpected backslash interpretation, always use single quotes
  116. instead of double quotes to construct a match operator argument for
  117. <CODE>prompt()</CODE> and <CODE>waitfor()</CODE> (e.g. <CODE>'/bash\$ $/'</CODE>).  If you're
  118. constructing a DOS like file path, you'll need to use four backslashes
  119. to represent one (e.g. <CODE>'/c:\\\\users\\\\bill>$/i'</CODE>).
  120. <P>Of course don't forget about regexp metacharacters like <CODE>.</CODE>, <CODE>[</CODE>, or
  121. <CODE>$</CODE>.  You'll only need a single backslash to quote them.  The anchor
  122. metacharacters <CODE>^</CODE> and <CODE>$</CODE> refer to positions in the input buffer.</P>
  123. <P></P>
  124. <LI>
  125. Errors such as timing-out are handled according to the <EM>errmode</EM>
  126. action.  The default action is to print an error message to standard
  127. error and have the program die.  Use <CODE>errmode()</CODE> to change the
  128. action.
  129. <P>Using an <EM>errmode</EM> of <CODE>"return"</CODE> arranges for the error message to
  130. be saved and the offending method to return with an undefined value.
  131. You can obtain the error message using <CODE>errmsg()</CODE>.</P>
  132. <P></P>
  133. <LI>
  134. You'll need to be running at least Perl version 5.002 to use this
  135. module.  This module does not require any libraries that don't already
  136. come with a standard Perl distribution.
  137. <P>If you have the IO:: libraries installed then IO::Socket::INET is used
  138. as a base class, otherwise FileHandle is used.  The IO:: libraries now
  139. come standard starting with perl5.004.</P>
  140. <P></P>
  141. <LI>
  142. In the input stream, each sequence of <EM>carriage return</EM> and <EM>line
  143. feed</EM> (i.e. <CODE>"\015\012"</CODE> or CR LF) is converted to <CODE>"\n"</CODE>.  In the
  144. output stream, each occurrence of <CODE>"\n"</CODE> is converted to a sequence
  145. of CR LF.  See <A HREF="../../../lib/Pod/perlfunc.html#item_binmode"><CODE>binmode()</CODE></A> to change the behavior.  TCP protocols
  146. typically use the ASCII sequence, carriage return and line feed to
  147. designate a newline.
  148. <P></P>
  149. <LI>
  150. Timing-out while making a connection is disabled for machines that
  151. don't support the <A HREF="../../../lib/Pod/perlfunc.html#item_alarm"><CODE>alarm()</CODE></A> function.  Most notably these include
  152. Win32 machines.
  153. <P>More universal support for connection time-outs will be in a later
  154. release.</P>
  155. <P></P>
  156. <LI>
  157. This is an alpha version - meaning that the interface may change in
  158. future versions.  Contact me, Jay Rogers <<A HREF="mailto:jay@rgrs.com">jay@rgrs.com</A>>, if you find
  159. any bugs or have suggestions for improvement.
  160. <P></P></UL>
  161. <P>
  162. <H2><A NAME="debugging">Debugging</A></H2>
  163. <P>The typical bug causes a timeout error because you've made incorrect
  164. assumptions about what the remote side actually sends.  The easiest
  165. way to reconcile what the remote side sends with your expectations is
  166. to use <CODE>input_log()</CODE> or <CODE>dump_log()</CODE>.</P>
  167. <P><CODE>dump_log()</CODE> allows you to see the data being sent from the remote
  168. side before any translation is done, while <CODE>input_log()</CODE> shows you
  169. the results after translation.  The translation includes converting
  170. end of line characters and stripping and responding to TELNET protocol
  171. commands.</P>
  172. <P>
  173. <H2><A NAME="style of named parameters">Style of Named Parameters</A></H2>
  174. <P>Two different styles of named parameters are supported.  This document
  175. only shows the IO:: style:</P>
  176. <PRE>
  177.     Net::Telnet->new(Timeout => 20);</PRE>
  178. <P>however the dash-option style is also allowed:</P>
  179. <PRE>
  180.     Net::Telnet->new(-timeout => 20);</PRE>
  181. <P>
  182. <H2><A NAME="connecting to a remote win32 machine">Connecting to a Remote Win32 Machine</A></H2>
  183. <P>By default, Windows machines don't come with a TELNET service.
  184. However, third party TELNET servers can be acquired to provide access
  185. to a DOS shell.  As is all too familiar, many of these servers are of
  186. inferior quality.</P>
  187. <P>One particularly nasty problem is a server that sends ANSI terminal
  188. escape sequences despite being told not to.  These escape sequences
  189. make your job of parsing the data much more difficult.  You can
  190. sometimes avoid this with a server that prompts you for <EM>console
  191. mode</EM>.  Choose <EM>no</EM> to console mode.</P>
  192. <P>
  193. <HR>
  194. <H1><A NAME="methods">METHODS</A></H1>
  195. <DL>
  196. <DT><STRONG><A NAME="item_new_%2D_create_a_new_Net%3A%3ATelnet_object"><STRONG>new</STRONG> - create a new Net::Telnet object</A></STRONG><BR>
  197. <DD>
  198. <PRE>
  199.     $obj = Net::Telnet->new([Binmode    => $mode,]
  200.                             [Cmd_remove_mode => $mode,]
  201.                             [Dump_Log   => $filename,]
  202.                             [Errmode    => $errmode,]
  203.                             [Fhopen     => $filehandle,]
  204.                             [Host       => $host,]
  205.                             [Input_log  => $file,]
  206.                             [Input_record_separator => $char,]
  207.                             [Option_log => $file,]
  208.                             [Output_log => $file,]
  209.                             [Output_record_separator => $char,]
  210.                             [Port       => $port,]
  211.                             [Prompt     => $matchop,]
  212.                             [Telnetmode => $mode,]
  213.                             [Timeout    => $secs,]);</PRE>
  214. <P>This is the constructor for Net::Telnet objects.  A new object is
  215. returned on success, the <EM>$errmode</EM> action is performed on failure -
  216. see <CODE>errmode()</CODE>.  The arguments are short-cuts to methods of the same
  217. name.</P>
  218. <P>If the <EM>$host</EM> argument is given then the object is opened by
  219. connecting to TCP <EM>$port</EM> on <EM>$host</EM>.  Also see <A HREF="../../../lib/Pod/perlfunc.html#item_open"><CODE>open()</CODE></A>.  The new
  220. object returned is given the following defaults in the absence of
  221. corresponding named arguments:</P>
  222. <DL>
  223. <DT><DD>
  224. The default <EM>Host</EM> is <CODE>"localhost"</CODE>
  225. <P></P>
  226. <DT><DD>
  227. The default <EM>Port</EM> is <CODE>23</CODE>
  228. <P></P>
  229. <DT><DD>
  230. The default <EM>Prompt</EM> is <CODE>'/[\$%#>] $/'</CODE>
  231. <P></P>
  232. <DT><DD>
  233. The default <EM>Timeout</EM> is <CODE>10</CODE>
  234. <P></P>
  235. <DT><DD>
  236. The default <EM>Errmode</EM> is <CODE>"die"</CODE>
  237. <P></P>
  238. <DT><DD>
  239. The default <EM>Output_record_separator</EM> is <CODE>"\n"</CODE>
  240. <P></P>
  241. <DT><DD>
  242. The default <EM>Input_record_separator</EM> is <CODE>"\n"</CODE>
  243. <P></P>
  244. <DT><DD>
  245. The default <EM>Binmode</EM> is <CODE>0</CODE>, which means do newline translation
  246. <P></P>
  247. <DT><DD>
  248. The default <EM>Cmd_remove_mode</EM> is <CODE>"auto"</CODE>.
  249. <P></P></DL>
  250. </DL>
  251. <DL>
  252. <DT><STRONG><A NAME="item_binmode_%2D_toggle_newline_translation"><STRONG>binmode</STRONG> - toggle newline translation</A></STRONG><BR>
  253. <DD>
  254. <PRE>
  255.     $mode = $obj->binmode;</PRE>
  256. <PRE>
  257.     $prev = $obj->binmode($mode);</PRE>
  258. <P>This method controls whether or not sequences of carriage returns and
  259. line feeds (CR LF or more specifically <CODE>"\015\012"</CODE>) are translated.
  260. By default they are translated (i.e. binmode is <CODE>0</CODE>).</P>
  261. <P>If no argument is given, the current mode is returned.</P>
  262. <P>If <EM>$mode</EM> is <CODE>1</CODE> then binmode is <EM>on</EM> and newline translation is
  263. not done.</P>
  264. <P>If <EM>$mode</EM> is <CODE>0</CODE> then binmode is <EM>off</EM> and newline translation is
  265. done.  In the input stream, each sequence of CR LF is converted to
  266. <CODE>"\n"</CODE> and in the output stream, each occurrence of <CODE>"\n"</CODE> is
  267. converted to a sequence of CR LF.</P>
  268. <P>Note that input is always buffered.  Changing binmode doesn't effect
  269. what's already been read into the buffer.  Output is not buffered and
  270. changing binmode will have an immediate effect.</P>
  271. </DL>
  272. <DL>
  273. <DT><STRONG><A NAME="item_break_%2D_send_TELNET_break_character"><STRONG>break</STRONG> - send TELNET break character</A></STRONG><BR>
  274. <DD>
  275. <PRE>
  276.     $ok = $obj->break;</PRE>
  277. <P>This method sends the TELNET break character.  This character is
  278. provided because it's a signal outside the USASCII character set which
  279. is currently given local meaning within many systems.  It's intended
  280. to indicate that the Break Key or the Attention Key was hit.</P>
  281. </DL>
  282. <DL>
  283. <DT><STRONG><A NAME="item_buffer_%2D_scalar_reference_to_object%27s_input_bu"><STRONG>buffer</STRONG> - scalar reference to object's input buffer</A></STRONG><BR>
  284. <DD>
  285. <PRE>
  286.     $ref = $obj->buffer;</PRE>
  287. <P>This method returns a scalar reference to the input buffer for
  288. <EM>$obj</EM>.  Data in the input buffer is data that has been read from the
  289. remote side but has yet to be read by the user.  Modifications to the
  290. input buffer are returned by a subsequent read.</P>
  291. </DL>
  292. <DL>
  293. <DT><STRONG><A NAME="item_buffer_empty_%2D_discard_all_data_in_object%27s_in"><STRONG>buffer_empty</STRONG> - discard all data in object's input buffer</A></STRONG><BR>
  294. <DD>
  295. <PRE>
  296.     $obj->buffer_empty;</PRE>
  297. <P>This method removes all data in the input buffer for <EM>$obj</EM>.</P>
  298. </DL>
  299. <DL>
  300. <DT><STRONG><A NAME="item_close_%2D_close_object"><STRONG>close</STRONG> - close object</A></STRONG><BR>
  301. <DD>
  302. <PRE>
  303.     $ok = $obj->close;</PRE>
  304. <P>This method closes the socket, file, or pipe associated with the
  305. object.</P>
  306. </DL>
  307. <DL>
  308. <DT><STRONG><A NAME="item_cmd_%2D_issue_command_and_retrieve_output"><STRONG>cmd</STRONG> - issue command and retrieve output</A></STRONG><BR>
  309. <DD>
  310. <PRE>
  311.     $ok = $obj->cmd($string);
  312.     $ok = $obj->cmd(String   => $string,
  313.                     [Output  => $ref,]
  314.                     [Prompt  => $match,]
  315.                     [Timeout => $secs,]
  316.                     [Cmd_remove_mode => $mode,]);</PRE>
  317. <PRE>
  318.     @output = $obj->cmd($string);
  319.     @output = $obj->cmd(String   => $string,
  320.                         [Output  => $ref,]
  321.                         [Prompt  => $match,]
  322.                         [Timeout => $secs,]
  323.                         [Cmd_remove_mode => $mode,]);</PRE>
  324. <P>This method sends the command <EM>$string</EM>, and reads the characters
  325. sent back by the command up until and including the matching prompt.
  326. It's assumed that the program to which you're sending is some kind of
  327. command prompting interpreter such as a shell.</P>
  328. <P>In a scalar context the characters read are discarded and a boolean is
  329. returned indicating the success or failure of sending the command
  330. string and reading the prompt.  Note that in order to return on error,
  331. <CODE>errmode()</CODE> must not be set to <CODE>"die"</CODE>.</P>
  332. <P>In an array context, just the output generated by the command is
  333. returned, one line per element.  In other words, all the characters in
  334. between the echoed back command string and the prompt are returned.
  335. If the command happens to return no output, an array containing one
  336. element, the null string is returned.  This is so the array will
  337. indicate true in a boolean context.</P>
  338. <P>Many command interpreters echo back the command sent.  In most
  339. situations, this method removes the first line returned from the
  340. remote side (i.e. the echoed back command).  See <CODE>cmd_remove_mode()</CODE>
  341. for more control over this feature.</P>
  342. <P>Use <CODE>dump_log()</CODE> to debug when this method keeps timing-out and you
  343. don't think it should.</P>
  344. <P>Optional named arguments are provided to override the current settings
  345. of prompt, timeout, and cmd_remove_mode.</P>
  346. <P>The <EM>Output</EM> named argument provides an alternative method of
  347. receiving command output.  If you pass a scalar reference, all the
  348. output (even if it contains multiple lines) is returned in the
  349. referenced scalar.  If you pass an array or hash reference, the lines
  350. of output are returned in the referenced array or hash.</P>
  351. </DL>
  352. <DL>
  353. <DT><STRONG><A NAME="item_cmd_remove_mode_%2D_toggle_removal_of_echoed_comma"><STRONG>cmd_remove_mode</STRONG> - toggle removal of echoed commands</A></STRONG><BR>
  354. <DD>
  355. <PRE>
  356.     $mode = $obj->cmd_remove_mode;</PRE>
  357. <PRE>
  358.     $prev = $obj->cmd_remove_mode($mode);</PRE>
  359. <P>This method controls how to deal with echoed back commands in the
  360. output returned by cmd().  Typically, when you send a command to the
  361. remote side, the first line of output returned is the command echoed
  362. back.  Use this mode to remove the first line of output normally
  363. returned by cmd().</P>
  364. <P>If no argument is given, the current mode is returned.</P>
  365. <P>If <EM>$mode</EM> is <CODE>0</CODE> then the command output returned from <CODE>cmd()</CODE> has no
  366. lines removed.  If <EM>$mode</EM> is a positive integer, then the first
  367. <EM>$mode</EM> lines of command output are stripped.</P>
  368. <P>By default, <EM>$mode</EM> is set to <CODE>"auto"</CODE>.  Auto means that whether or
  369. not the first line of command output is stripped, depends on whether
  370. or not the remote side offered to echo.  By default, Net::Telnet
  371. always accepts an offer to echo by the remote side.  You can change
  372. the default to reject such an offer using <CODE>option_accept()</CODE>.</P>
  373. </DL>
  374. <DL>
  375. <DT><STRONG><A NAME="item_dump_log_%2D_log_all_I%2FO_in_dump_format"><STRONG>dump_log</STRONG> - log all I/O in dump format</A></STRONG><BR>
  376. <DD>
  377. <PRE>
  378.     $fh = $obj->dump_log;</PRE>
  379. <PRE>
  380.     $fh = $obj->dump_log($fh);</PRE>
  381. <PRE>
  382.     $fh = $obj->dump_log($filename);</PRE>
  383. <P>This method starts or stops dump format logging of all the object's
  384. input and output.  The dump format shows the blocks read and written
  385. in a hexadecimal and printable character format.  This method is
  386. useful when debugging, however you might want to first try
  387. <CODE>input_log()</CODE> as it's more readable.</P>
  388. <P>If no argument is given, the current log filehandle is returned.  A
  389. null string indicates logging is off.</P>
  390. <P>To stop logging, use a null string as an argument.</P>
  391. <P>If an open filehandle is given, it is used for logging and returned.
  392. Otherwise, the argument is assumed to be the name of a file, the file
  393. is opened and a filehandle to it is returned.</P>
  394. </DL>
  395. <DL>
  396. <DT><STRONG><A NAME="item_eof_%2D_end_of_file_indicator"><STRONG>eof</STRONG> - end of file indicator</A></STRONG><BR>
  397. <DD>
  398. <PRE>
  399.     $eof = $obj->eof;</PRE>
  400. <P>This method indicates if end of file has been read.  Because the input
  401. is buffered this isn't the same thing as <EM>$obj</EM> has closed.  In other
  402. words <EM>$obj</EM> can be closed but there still can be stuff in the buffer
  403. to be read.  Under this condition you can still read but you won't be
  404. able to write.</P>
  405. </DL>
  406. <DL>
  407. <DT><STRONG><A NAME="item_errmode_%2D_define_action_to_be_performed_on_error"><STRONG>errmode</STRONG> -  define action to be performed on error</A></STRONG><BR>
  408. <DD>
  409. <PRE>
  410.     $mode = $obj->errmode;</PRE>
  411. <PRE>
  412.     $prev = $obj->errmode($mode);</PRE>
  413. <P>This method gets or sets the action used when errors are encountered
  414. using the object.  The first calling sequence returns the current
  415. error mode.  The second calling sequence sets it to <EM>$mode</EM> and
  416. returns the previous mode.  Valid values for <EM>$mode</EM> are <CODE>"die"</CODE>
  417. (the default), <CODE>"return"</CODE>, a <EM>coderef</EM>, or an <EM>arrayref</EM>.</P>
  418. <P>When mode is <CODE>"die"</CODE> and an error is encountered using the object,
  419. then an error message is printed to standard error and the program
  420. dies.</P>
  421. <P>When mode is <CODE>"return"</CODE> then the method generating the error places
  422. an error message in the object and returns the undefined value in a
  423. scalar context and a null list in list context.  The error message may
  424. be obtained using <CODE>errmsg()</CODE>.</P>
  425. <P>When mode is a <EM>coderef</EM>, then when an error is encountered
  426. <EM>coderef</EM> is called with the error message as its first argument.
  427. Using this mode you may have your own subroutine handle errors.  If
  428. <EM>coderef</EM> itself returns then the method generating the error returns
  429. undefined or a null list depending on context.</P>
  430. <P>When mode is an <EM>arrayref</EM>, the first element of the array must be a
  431. <EM>coderef</EM>.  Any elements that follow are the arguments to <EM>coderef</EM>.
  432. When an error is encountered, the <EM>coderef</EM> is called with its
  433. arguments.  Using this mode you may have your own subroutine handle
  434. errors.  If the <EM>coderef</EM> itself returns then the method generating
  435. the error returns undefined or a null list depending on context.</P>
  436. </DL>
  437. <DL>
  438. <DT><STRONG><A NAME="item_errmsg_%2D_most_recent_error_message"><STRONG>errmsg</STRONG> - most recent error message</A></STRONG><BR>
  439. <DD>
  440. <PRE>
  441.     $msg = $obj->errmsg;</PRE>
  442. <PRE>
  443.     $prev = $obj->errmsg(@msgs);</PRE>
  444. <P>The first calling sequence returns the error message associated with
  445. the object.  The null string is returned if no error has been
  446. encountered yet.  The second calling sequence sets the error message
  447. for the object to the concatenation of <EM>@msgs</EM> and returns the
  448. previous error message.  Normally, error messages are set internally
  449. by a method when an error is encountered.</P>
  450. </DL>
  451. <DL>
  452. <DT><STRONG><A NAME="item_error_%2D_perform_the_error_mode_action"><STRONG>error</STRONG> - perform the error mode action</A></STRONG><BR>
  453. <DD>
  454. <PRE>
  455.     $obj->error(@msgs);</PRE>
  456. <P>This method concatenates <EM>@msgs</EM> into a string and places it in the
  457. object as the error message.  Also see <CODE>errmsg()</CODE>.  It then performs
  458. the error mode.  Also see <CODE>errmode()</CODE>.</P>
  459. <P>If the error mode doesn't cause the program to die then the undefined
  460. value or a null list is returned depending on context.</P>
  461. <P>This method is primarily used by this class or a sub-class to perform
  462. the user requested action when an error is encountered.</P>
  463. </DL>
  464. <DL>
  465. <DT><STRONG><A NAME="item_fhopen_%2D_use_already_open_filehandle_for_I%2FO"><STRONG>fhopen</STRONG> - use already open filehandle for I/O</A></STRONG><BR>
  466. <DD>
  467. <PRE>
  468.     $ok = $obj->fhopen($fh);</PRE>
  469. <P>This method associates the open filehandle <EM>$fh</EM> with <EM>$obj</EM> for
  470. further I/O.  Filehandle <EM>$fh</EM> must already be opened.</P>
  471. <P>Suppose you want to use the features of this module to do I/O to
  472. something other than a TCP port, for example STDIN or a filehandle
  473. opened to read from a process.  Instead of opening the object for I/O
  474. to a TCP port by using <A HREF="../../../lib/Pod/perlfunc.html#item_open"><CODE>open()</CODE></A> or <CODE>new()</CODE>, call this method
  475. instead.</P>
  476. </DL>
  477. <DL>
  478. <DT><STRONG><A NAME="item_get_%2D_read_block_of_data"><STRONG>get</STRONG> - read block of data</A></STRONG><BR>
  479. <DD>
  480. <PRE>
  481.     $data = $obj->get([Timeout => $secs,]);</PRE>
  482. <P>This method reads a block of data from the object and returns it along
  483. with any buffered data.  If no buffered data is available to return,
  484. it will wait for data to read using the timeout specified in the
  485. object.  You can override that timeout using <EM>$secs</EM>.  Also see
  486. <CODE>timeout()</CODE>.  If buffered data is available to return, it also checks
  487. for a block of data that can be immediately read.</P>
  488. <P>On eof an undefined value is returned.  On time-out or other errors
  489. the error mode action is performed.</P>
  490. <P>An undefined value is returned for both eof and time-out when
  491. <EM>errmode</EM> is not set to <CODE>"die"</CODE>.  Use <A HREF="../../../lib/Pod/perlfunc.html#item_eof"><CODE>eof()</CODE></A> and <CODE>timed_out()</CODE> to
  492. distinguish.</P>
  493. </DL>
  494. <DL>
  495. <DT><STRONG><A NAME="item_getline_%2D_read_next_line"><STRONG>getline</STRONG> - read next line</A></STRONG><BR>
  496. <DD>
  497. <PRE>
  498.     $line = $obj->getline([Timeout => $secs,]);</PRE>
  499. <P>This method reads and returns the next line of data from the object.
  500. You can use <A HREF="../../../lib/Pod/perlvar.html#item_input_record_separator"><CODE>input_record_separator()</CODE></A> to change the notion of what
  501. separates a line.  The default is <CODE>"\n"</CODE>.</P>
  502. <P>If a line isn't immediately available, this method blocks waiting for
  503. a line or the timeout.  You can override the object's timeout for this
  504. method using <EM>$secs</EM>.  Also see <CODE>timeout()</CODE>.</P>
  505. <P>On eof an undefined value is returned.  On timeout or other errors the
  506. error mode action is performed.</P>
  507. <P>An undefined value is returned for both eof and time-out when
  508. <EM>errmode</EM> is not set to <CODE>"die"</CODE>.  Use <A HREF="../../../lib/Pod/perlfunc.html#item_eof"><CODE>eof()</CODE></A> and <CODE>timed_out()</CODE> to
  509. distinguish.</P>
  510. </DL>
  511. <DL>
  512. <DT><STRONG><A NAME="item_getlines_%2D_read_next_lines"><STRONG>getlines</STRONG> - read next lines</A></STRONG><BR>
  513. <DD>
  514. <PRE>
  515.     @lines = $obj->getlines([Timeout => $secs,]);</PRE>
  516. <P>This method reads and returns the next available lines of data from
  517. the object.  You can use <A HREF="../../../lib/Pod/perlvar.html#item_input_record_separator"><CODE>input_record_separator()</CODE></A> to change the
  518. notion of what separates a line.  The default is <CODE>"\n"</CODE>.</P>
  519. <P>If a line isn't immediately available, this method blocks waiting for
  520. one or more lines, or the timeout.  You can override the object's
  521. timeout for this method using <EM>$secs</EM>.  Also see <CODE>timeout()</CODE>.</P>
  522. <P>On eof a null array is returned.  On timeout or other errors the error
  523. mode action is performed.</P>
  524. <P>A null array is returned for both eof and time-out when <EM>errmode</EM> is
  525. not set to <CODE>"die"</CODE>.  Use <A HREF="../../../lib/Pod/perlfunc.html#item_eof"><CODE>eof()</CODE></A> and <CODE>timed_out()</CODE> to distinguish.</P>
  526. </DL>
  527. <DL>
  528. <DT><STRONG><A NAME="item_host_%2D_name_of_remote_host"><STRONG>host</STRONG> - name of remote host</A></STRONG><BR>
  529. <DD>
  530. <PRE>
  531.     $host = $obj->host;</PRE>
  532. <PRE>
  533.     $prev = $obj->host($host);</PRE>
  534. <P>This method designates the remote host.  With no argument this method
  535. returns the current host name set in the object.  With an argument it
  536. sets the current host name to <EM>$host</EM> and returns the previous host
  537. name.  You may indicate the remote host using either a hostname or an
  538. IP address.</P>
  539. </DL>
  540. <DL>
  541. <DT><STRONG><A NAME="item_input_log_%2D_log_all_input"><STRONG>input_log</STRONG> - log all input</A></STRONG><BR>
  542. <DD>
  543. <PRE>
  544.     $fh = $obj->input_log;</PRE>
  545. <PRE>
  546.     $fh = $obj->input_log($fh);</PRE>
  547. <PRE>
  548.     $fh = $obj->input_log($filename);</PRE>
  549. <P>This method starts or stops logging of input.  This is useful when
  550. debugging.  Also see <CODE>dump_log()</CODE>.  Because most command interpreters
  551. echo back commands received, its likely all your output will also be
  552. in this log.  Note that input logging occurs after newline
  553. translation.  See <A HREF="../../../lib/Pod/perlfunc.html#item_binmode"><CODE>binmode()</CODE></A> for details on newline translation.</P>
  554. <P>If no argument is given, the log filehandle is returned.  A null
  555. string indicates logging is off.</P>
  556. <P>To stop logging, use a null string as an argument.</P>
  557. <P>If an open filehandle is given, it is used for logging and returned.
  558. Otherwise, the argument is assumed to be the name of a file, the file
  559. is opened for logging and a filehandle to it is returned.</P>
  560. </DL>
  561. <DL>
  562. <DT><STRONG><A NAME="item_input_record_separator_%2D_input_line_delimiter"><STRONG>input_record_separator</STRONG> - input line delimiter</A></STRONG><BR>
  563. <DD>
  564. <PRE>
  565.     $rs = $obj->input_record_separator;</PRE>
  566. <PRE>
  567.     $prev = $obj->input_record_separator($rs);</PRE>
  568. <P>This method designates the line delimiter for input.  It's used with
  569. <CODE>getline()</CODE>, <CODE>getlines()</CODE>, and <CODE>cmd()</CODE> to determine lines in the
  570. input.</P>
  571. <P>With no argument this method returns the current input record
  572. separator set in the object.  With an argument it sets the input
  573. record separator to <EM>$rs</EM> and returns the previous value.</P>
  574. </DL>
  575. <DL>
  576. <DT><STRONG><A NAME="item_lastline_%2D_last_line_read"><STRONG>lastline</STRONG> - last line read</A></STRONG><BR>
  577. <DD>
  578. <PRE>
  579.     $line = $obj->lastline;</PRE>
  580. <PRE>
  581.     $prev = $obj->lastline($line);</PRE>
  582. <P>This method saves the last line read from the object.  This may be a
  583. useful error message when the remote side abnormally closes the
  584. connection.  Typically the remote side will print an error message
  585. before closing.</P>
  586. <P>With no argument this method returns the last line read from the
  587. object.  With an argument it sets the last line read to <EM>$line</EM> and
  588. returns the previous value.  Normally, only internal methods set the
  589. last line.</P>
  590. </DL>
  591. <DL>
  592. <DT><STRONG><A NAME="item_login_%2D_perform_standard_login"><STRONG>login</STRONG> - perform standard login</A></STRONG><BR>
  593. <DD>
  594. <PRE>
  595.     $ok = $obj->login($username, $password);</PRE>
  596. <PRE>
  597.     $ok = $obj->login(Name     => $username,
  598.                       Password => $password,
  599.                       [Prompt  => $match,]
  600.                       [Timeout => $secs,]);</PRE>
  601. <P>This method performs a standard login by waiting for a login prompt
  602. and responding with <EM>$username</EM>, then waiting for the password prompt
  603. and responding with <EM>$password</EM>, and then waiting for the command
  604. interpreter prompt.  If any of those prompts sent by the remote side
  605. don't match what's expected, this method will timeout - unless timeout
  606. is turned off.</P>
  607. <P>Login prompts must match either of the patterns:</P>
  608. <PRE>
  609.     /login[: ]*$/i
  610.     /username[: ]*$/i</PRE>
  611. <P>Password prompts must match the pattern:</P>
  612. <PRE>
  613.     /password[: ]*$/i</PRE>
  614. <P>The command interpreter prompt must match the current setting of
  615. prompt.</P>
  616. <P>Use <CODE>dump_log()</CODE> to debug when this method keeps timing-out and you
  617. don't think it should.</P>
  618. <P>Optional named arguments are provided to override the current settings
  619. of prompt and timeout.</P>
  620. </DL>
  621. <DL>
  622. <DT><STRONG><A NAME="item_max_buffer_length_%2D_maximum_size_of_input_buffer"><STRONG>max_buffer_length</STRONG> - maximum size of input buffer</A></STRONG><BR>
  623. <DD>
  624. <PRE>
  625.     $len = $obj->max_buffer_length;</PRE>
  626. <PRE>
  627.     $prev = $obj->max_buffer_length($len);</PRE>
  628. <P>This method designates the maximum size of the input buffer.  An error
  629. is generated when a read causes the buffer to exceed this limit.  The
  630. default value is 1,048,576 bytes (1MB).  The input buffer can grow
  631. much larger than the block size when you continuously read using
  632. <CODE>getline()</CODE> or <CODE>waitfor()</CODE> and the data stream contains no newlines
  633. or matching waitfor patterns.</P>
  634. <P>With no argument this method returns the current maximum buffer length
  635. set in the object.  With an argument it sets the maximum buffer length
  636. to <EM>$len</EM> and returns the previous value.</P>
  637. </DL>
  638. <DL>
  639. <DT><STRONG><A NAME="item_open_%2D_connect_to_port_on_remote_host"><STRONG>open</STRONG> - connect to port on remote host</A></STRONG><BR>
  640. <DD>
  641. <PRE>
  642.     $ok = $obj->open($host);</PRE>
  643. <PRE>
  644.     $ok = $obj->open([Host    => $host,]
  645.                      [Port    => $port,]
  646.                      [Timeout => $secs,]);</PRE>
  647. <P>This method opens a TCP connection to <EM>$port</EM> on <EM>$host</EM>.  If either
  648. argument is missing then the current value of <CODE>host()</CODE> or <CODE>port()</CODE>
  649. is used.  An optional named argument is provided to override the
  650. current setting of timeout.</P>
  651. <P>On time-out or other connection errors, the error mode action is
  652. performed.</P>
  653. <P>Timeouts don't work for this method on machines that don't implement
  654. SIGALRM - most notably Win32 machines.  For those machines, an error
  655. is returned when the system reaches its own time-out while trying to
  656. connect.</P>
  657. <P>A side effect of this method is to reset the alarm interval associated
  658. with SIGALRM.</P>
  659. </DL>
  660. <DL>
  661. <DT><STRONG><A NAME="item_option_accept_%2D_indicate_willingness_to_accept_a"><STRONG>option_accept</STRONG> - indicate willingness to accept a TELNET option</A></STRONG><BR>
  662. <DD>
  663. <PRE>
  664.     $fh = $obj->option_accept([Do   => $telopt,]
  665.                               [Dont => $telopt,]
  666.                               [Will => $telopt,]
  667.                               [Wont => $telopt,]);</PRE>
  668. <P>This method is used to indicate whether to accept or reject an offer
  669. to enable a TELNET option made by the remote side.  If you're using
  670. <EM>Do</EM> or <EM>Will</EM> to indicate a willingness to enable, then a
  671. notification callback must have already been defined by a prior call
  672. to <CODE>option_callback()</CODE>.  See <CODE>option_callback()</CODE> for details on
  673. receiving enable/disable notification of a TELNET option.</P>
  674. <P>You can give multiple <EM>Do</EM>, <EM>Dont</EM>, <EM>Will</EM>, or <EM>Wont</EM> arguments
  675. for different TELNET options in the same call to this method.</P>
  676. <P>The following example describes the meaning of the named arguments.  A
  677. TELNET option, such as <CODE>TELOPT_ECHO</CODE> used below, is an integer
  678. constant that you can import from Net::Telnet.  See the source in file
  679. Telnet.pm for the complete list.</P>
  680. <DL>
  681. <DT><DD>
  682. <EM>Do</EM> => <CODE>TELOPT_ECHO</CODE>
  683. <DL>
  684. <DT><DD>
  685. we'll accept an offer to enable the echo option on the local side
  686. <P></P></DL>
  687. <DT><DD>
  688. <EM>Dont</EM> => <CODE>TELOPT_ECHO</CODE>
  689. <DL>
  690. <DT><DD>
  691. we'll reject an offer to enable the echo option on the local side
  692. <P></P></DL>
  693. <DT><DD>
  694. <EM>Will</EM> => <CODE>TELOPT_ECHO</CODE>
  695. <DL>
  696. <DT><DD>
  697. we'll accept an offer to enable the echo option on the remote side
  698. <P></P></DL>
  699. <DT><DD>
  700. <EM>Wont</EM> => <CODE>TELOPT_ECHO</CODE>
  701. <DL>
  702. <DT><DD>
  703. we'll reject an offer to enable the echo option on the remote side
  704. <P></P></DL>
  705. </DL>
  706. <DT><DD>
  707. Use <CODE>option_send()</CODE> to send a request to the remote side to enable or
  708. disable a particular TELNET option.
  709. <P></P></DL>
  710. <DL>
  711. <DT><STRONG><A NAME="item_option_callback_%2D_define_the_option_negotiation_"><STRONG>option_callback</STRONG> - define the option negotiation callback</A></STRONG><BR>
  712. <DD>
  713. <PRE>
  714.     $coderef = $obj->option_callback;</PRE>
  715. <PRE>
  716.     $prev = $obj->option_callback($coderef);</PRE>
  717. <P>This method defines the callback subroutine that's called when a
  718. TELNET option is enabled or disabled.  Once defined, the
  719. <EM>option_callback</EM> may not be undefined.  However, calling this method
  720. with a different <EM>$coderef</EM> changes it.</P>
  721. <P>Here are the circumstances that invoke <EM>$coderef</EM>:</P>
  722. <DL>
  723. <DT><DD>
  724. An option becomes enabled because the remote side requested an enable
  725. and <CODE>option_accept()</CODE> had been used to arrange that it be accepted.
  726. <P></P>
  727. <DT><DD>
  728. The remote side arbitrarily decides to disable an option that is
  729. currently enabled.  Note that Net::Telnet always accepts a request to
  730. disable from the remote side.
  731. <P></P>
  732. <DT><DD>
  733. <CODE>option_send()</CODE> was used to send a request to enable or disable an
  734. option and the response from the remote side has just been received.
  735. Note, that if a request to enable is rejected then <EM>$coderef</EM> is
  736. still invoked even though the option didn't change.
  737. <P></P></DL>
  738. <DT><DD>
  739. Here are the arguments passed to <EM>&$coderef</EM>:
  740. <PRE>
  741.     &$coderef($obj, $option, $is_remote,
  742.               $is_enabled, $was_enabled, $buf_position);</PRE>
  743. <DL>
  744. <DT><DD>
  745. 1.  <EM>$obj</EM> is the Net::Telnet object
  746. <P></P>
  747. <DT><DD>
  748. 2.  <EM>$option</EM> is the TELNET option.  Net::Telnet exports constants
  749. for the various TELNET options which just equate to an integer.
  750. <P></P>
  751. <DT><DD>
  752. 3.  <EM>$is_remote</EM> is a boolean indicating for which side the option
  753. applies.
  754. <P></P>
  755. <DT><DD>
  756. 4.  <EM>$is_enabled</EM> is a boolean indicating the option is enabled or
  757. disabled
  758. <P></P>
  759. <DT><DD>
  760. 5.  <EM>$was_enabled</EM> is a boolean indicating the option was previously
  761. enabled or disabled
  762. <P></P>
  763. <DT><DD>
  764. 6.  <EM>$buf_position</EM> is an integer indicating the position in the
  765. object's input buffer where the option takes effect.  See <CODE>buffer()</CODE>
  766. to access the object's input buffer.
  767. <P></P></DL>
  768. </DL>
  769. <DL>
  770. <DT><STRONG><A NAME="item_option_log_%2D_log_all_TELNET_options_sent_or_rece"><STRONG>option_log</STRONG> - log all TELNET options sent or received</A></STRONG><BR>
  771. <DD>
  772. <PRE>
  773.     $fh = $obj->option_log;</PRE>
  774. <PRE>
  775.     $fh = $obj->option_log($fh);</PRE>
  776. <PRE>
  777.     $fh = $obj->option_log($filename);</PRE>
  778. <P>This method starts or stops logging of all TELNET options being sent
  779. or received.  This is useful for debugging when you send options via
  780. <CODE>option_send()</CODE> or you arrange to accept option requests from the
  781. remote side via <CODE>option_accept()</CODE>.  Also see <CODE>dump_log()</CODE>.</P>
  782. <P>If no argument is given, the log filehandle is returned.  A null
  783. string indicates logging is off.</P>
  784. <P>To stop logging, use a null string as an argument.</P>
  785. <P>If an open filehandle is given, it is used for logging and returned.
  786. Otherwise, the argument is assumed to be the name of a file, the file
  787. is opened for logging and a filehandle to it is returned.</P>
  788. </DL>
  789. <DL>
  790. <DT><STRONG><A NAME="item_option_send_%2D_send_TELNET_option_negotiation_req"><STRONG>option_send</STRONG> - send TELNET option negotiation request</A></STRONG><BR>
  791. <DD>
  792. <PRE>
  793.     $ok = $obj->option_send([Do    => $telopt,]
  794.                             [Dont  => $telopt,]
  795.                             [Will  => $telopt,]
  796.                             [Wont  => $telopt,]
  797.                             [Async => $boolean,]);</PRE>
  798. <P>This method is not yet implemented.  Look for it in a future version.</P>
  799. </DL>
  800. <DL>
  801. <DT><STRONG><A NAME="item_option_state_%2D_get_current_state_of_a_TELNET_opt"><STRONG>option_state</STRONG> - get current state of a TELNET option</A></STRONG><BR>
  802. <DD>
  803. <PRE>
  804.     $hashref = $obj->option_state($telopt);</PRE>
  805. <P>This method returns a hashref containing a copy of the current state
  806. of TELNET option <EM>$telopt</EM>.</P>
  807. <P>Here are the values returned in the hash:</P>
  808. <DL>
  809. <DT><DD>
  810. <EM>$hashref</EM>->{remote_enabled}
  811. <DL>
  812. <DT><DD>
  813. boolean that indicates if the option is enabled on the remote side.
  814. <P></P></DL>
  815. <DT><DD>
  816. <EM>$hashref</EM>->{remote_enable_ok}
  817. <DL>
  818. <DT><DD>
  819. boolean that indicates if it's ok to accept an offer to enable this
  820. option on the remote side.
  821. <P></P></DL>
  822. <DT><DD>
  823. <EM>$hashref</EM>->{remote_state}
  824. <DL>
  825. <DT><DD>
  826. string used to hold the internal state of option negotiation for this
  827. option on the remote side.
  828. <P></P></DL>
  829. <DT><DD>
  830. <EM>$hashref</EM>->{local_enabled}
  831. <DL>
  832. <DT><DD>
  833. boolean that indicates if the option is enabled on the local side.
  834. <P></P></DL>
  835. <DT><DD>
  836. <EM>$hashref</EM>->{local_enable_ok}
  837. <DL>
  838. <DT><DD>
  839. boolean that indicates if it's ok to accept an offer to enable this
  840. option on the local side.
  841. <P></P></DL>
  842. <DT><DD>
  843. <EM>$hashref</EM>->{local_state}
  844. <DL>
  845. <DT><DD>
  846. string used to hold the internal state of option negotiation for this
  847. option on the local side.
  848. <P></P></DL>
  849. </DL>
  850. </DL>
  851. <DL>
  852. <DT><STRONG><A NAME="item_output_field_separator_%2D_field_separator_for_pri"><STRONG>output_field_separator</STRONG> - field separator for print</A></STRONG><BR>
  853. <DD>
  854. <PRE>
  855.     $ofs = $obj->output_field_separator;</PRE>
  856. <PRE>
  857.     $prev = $obj->output_field_separator($ofs);</PRE>
  858. <P>This method designates the output field separator for <A HREF="../../../lib/Pod/perlfunc.html#item_print"><CODE>print()</CODE></A>.
  859. Ordinarily the print method simply prints out the comma separated
  860. fields you specify.  Set this to specify what's printed between
  861. fields.</P>
  862. <P>With no argument this method returns the current output field
  863. separator set in the object.  With an argument it sets the output
  864. field separator to <EM>$ofs</EM> and returns the previous value.</P>
  865. </DL>
  866. <DL>
  867. <DT><STRONG><A NAME="item_output_log_%2D_log_all_output"><STRONG>output_log</STRONG> - log all output</A></STRONG><BR>
  868. <DD>
  869. <PRE>
  870.     $fh = $obj->output_log;</PRE>
  871. <PRE>
  872.     $fh = $obj->output_log($fh);</PRE>
  873. <PRE>
  874.     $fh = $obj->output_log($filename);</PRE>
  875. <P>This method starts or stops logging of output.  This is useful when
  876. debugging.  Also see <CODE>dump_log()</CODE>.  Because most command interpreters
  877. echo back commands received, its likely all your output would also be
  878. in an input log.  See <CODE>input_log()</CODE>.  Note that output logging occurs
  879. before newline translation.  See <A HREF="../../../lib/Pod/perlfunc.html#item_binmode"><CODE>binmode()</CODE></A> for details on newline
  880. translation.</P>
  881. <P>If no argument is given, the log filehandle is returned.  A null
  882. string indicates logging is off.</P>
  883. <P>To stop logging, use a null string as an argument.</P>
  884. <P>If an open filehandle is given, it is used for logging and returned.
  885. Otherwise, the argument is assumed to be the name of a file, the file
  886. is opened for logging and a filehandle to it is returned.</P>
  887. </DL>
  888. <DL>
  889. <DT><STRONG><A NAME="item_output_record_separator_%2D_output_line_delimiter"><STRONG>output_record_separator</STRONG> - output line delimiter</A></STRONG><BR>
  890. <DD>
  891. <PRE>
  892.     $ors = $obj->output_record_separator;</PRE>
  893. <PRE>
  894.     $prev = $obj->output_record_separator($ors);</PRE>
  895. <P>This method designates the output record separator for <A HREF="../../../lib/Pod/perlfunc.html#item_print"><CODE>print()</CODE></A>.
  896. Ordinarily the print operator simply prints out the comma separated
  897. fields you specify, with no trailing newline or record separator
  898. assumed.  Set this variable to specify what's printed at the end of
  899. the print.</P>
  900. <P>Note: the output record separator is set to <CODE>"\n"</CODE> by default, so
  901. there's no need to append all your commands with a newline.</P>
  902. <P>With no argument this method returns the current output record
  903. separator set in the object.  With an argument it sets the output
  904. record separator to <EM>$ors</EM> and returns the previous value.</P>
  905. </DL>
  906. <DL>
  907. <DT><STRONG><A NAME="item_port_%2D_remote_port"><STRONG>port</STRONG> - remote port</A></STRONG><BR>
  908. <DD>
  909. <PRE>
  910.     $port = $obj->port;</PRE>
  911. <PRE>
  912.     $prev = $obj->port($port);</PRE>
  913. <P>This method designates the remote TCP port.  With no argument this
  914. method returns the current port number.  With an argument it sets the
  915. current port number to <EM>$port</EM> and returns the previous port.  If
  916. <EM>$port</EM> is a service name, then first it's converted to a port number
  917. using the perl function <A HREF="../../../lib/Pod/perlfunc.html#item_getservbyname"><CODE>getservbyname()</CODE></A>.</P>
  918. </DL>
  919. <DL>
  920. <DT><STRONG><A NAME="item_print_%2D_write_to_object"><STRONG>print</STRONG> - write to object</A></STRONG><BR>
  921. <DD>
  922. <PRE>
  923.     $ok = $obj->print(@list);</PRE>
  924. <P>This method prints a string or a comma-separated list of strings to
  925. the opened object and returns non-zero if all data was successfully
  926. written.</P>
  927. <P>By default, the <A HREF="../../../lib/Pod/perlvar.html#item_output_record_separator"><CODE>output_record_separator()</CODE></A> is set to <CODE>"\n"</CODE> in order
  928. to have your commands automatically end with a newline.  In most cases
  929. your output is being read by a command interpreter which won't accept
  930. a command until newline is read.  This is similar to someone typing a
  931. command and hitting the return key.</P>
  932. <P>On failure, it's possible that some data was written.  If you choose
  933. to try and recover from a print timing-out, use <CODE>print_length()</CODE> to
  934. determine how much was written before time-out occurred.</P>
  935. </DL>
  936. <DL>
  937. <DT><STRONG><A NAME="item_print_length_%2D_number_of_bytes_written_by_print"><STRONG>print_length</STRONG> - number of bytes written by print</A></STRONG><BR>
  938. <DD>
  939. <PRE>
  940.     $num = $obj->print_length;</PRE>
  941. <P>This returns the number of bytes successfully written by the most
  942. recent <A HREF="../../../lib/Pod/perlfunc.html#item_print"><CODE>print()</CODE></A>.</P>
  943. </DL>
  944. <DL>
  945. <DT><STRONG><A NAME="item_prompt_%2D_pattern_to_match_a_prompt"><STRONG>prompt</STRONG> - pattern to match a prompt</A></STRONG><BR>
  946. <DD>
  947. <PRE>
  948.     $matchop = $obj->prompt;</PRE>
  949. <PRE>
  950.     $prev = $obj->prompt($matchop);</PRE>
  951. <P>This method sets the pattern used to find a prompt in the input
  952. stream.  It must be a string representing a valid perl pattern match
  953. operator.  The methods <CODE>login()</CODE> and <CODE>cmd()</CODE> try to read until
  954. matching the prompt.  They will fail with a time-out error if the
  955. pattern you've chosen doesn't match what the remote side sends.</P>
  956. <P>With no argument this method returns the prompt set in the object.
  957. With an argument it sets the prompt to <EM>$matchop</EM> and returns the
  958. previous value.</P>
  959. <P>The default prompt is <CODE>'/[\$%#>] $/'</CODE></P>
  960. <P>Always use single quotes, instead of double quotes, to construct
  961. <EM>$matchop</EM> (e.g. <CODE>'/bash\$ $/'</CODE>).  If you're constructing a DOS like
  962. file path, you'll need to use four backslashes to represent one
  963. (e.g. <CODE>'/c:\\\\users\\\\bill>$/i'</CODE>).</P>
  964. <P>Of course don't forget about regexp metacharacters like <CODE>.</CODE>, <CODE>[</CODE>, or
  965. <CODE>$</CODE>.  You'll only need a single backslash to quote them.  The anchor
  966. metacharacters <CODE>^</CODE> and <CODE>$</CODE> refer to positions in the input buffer.</P>
  967. </DL>
  968. <DL>
  969. <DT><STRONG><A NAME="item_telnetmode_%2D_turn_off%2Fon_telnet_command_interp"><STRONG>telnetmode</STRONG> - turn off/on telnet command interpretation</A></STRONG><BR>
  970. <DD>
  971. <PRE>
  972.     $mode = $obj->telnetmode;</PRE>
  973. <PRE>
  974.     $prev = $obj->telnetmode($mode);</PRE>
  975. <P>This method controls whether or not TELNET commands in the data stream
  976. are recognized and handled.  The TELNET protocol uses certain
  977. character sequences sent in the data stream to control the session.
  978. If the port you're connecting to isn't using the TELNET protocol, then
  979. you should turn this mode off.  The default is <EM>on</EM>.</P>
  980. <P>If no argument is given, the current mode is returned.</P>
  981. <P>If <EM>$mode</EM> is <CODE>0</CODE> then telnet mode is off.  If <EM>$mode</EM> is <CODE>1</CODE> then
  982. telnet mode is on.</P>
  983. </DL>
  984. <DL>
  985. <DT><STRONG><A NAME="item_timed_out_%2D_time%2Dout_indicator"><STRONG>timed_out</STRONG> - time-out indicator</A></STRONG><BR>
  986. <DD>
  987. <PRE>
  988.     $boolean = $obj->timed_out;</PRE>
  989. <PRE>
  990.     $prev = $obj->timed_out($boolean);</PRE>
  991. <P>This method indicates if a previous read or write method timed-out.</P>
  992. <P>With no argument this method returns true if a previous method
  993. timed-out.  With an argument it sets the indicator.  Normally, only
  994. internal methods set this indicator.</P>
  995. </DL>
  996. <DL>
  997. <DT><STRONG><A NAME="item_timeout_%2D_I%2FO_time%2Dout_interval"><STRONG>timeout</STRONG> - I/O time-out interval</A></STRONG><BR>
  998. <DD>
  999. <PRE>
  1000.     $secs = $obj->timeout;</PRE>
  1001. <PRE>
  1002.     $prev = $obj->timeout($secs);</PRE>
  1003. <P>This method sets the timeout interval that's used when performing I/O
  1004. or connecting to a port.  When a method doesn't complete within the
  1005. timeout interval then it's an error and the error mode action is
  1006. performed.</P>
  1007. <P>The timeout may be expressed as a relative or absolute value.  If
  1008. <EM>$secs</EM> is greater than or equal to the time the program was started,
  1009. as determined by $^T, then it's the absolute time when timeout occurs.
  1010. Also see the perl function <A HREF="../../../lib/Pod/perlfunc.html#item_time"><CODE>time()</CODE></A>.  A relative timeout happens
  1011. <EM>$secs</EM> from when the I/O method begins.</P>
  1012. <P>If <EM>$secs</EM> is <CODE>0</CODE> then timeout occurs if the data cannot be
  1013. immediately read or written.  Use the undefined value to turn off
  1014. timing-out.</P>
  1015. <P>With no argument this method returns the timeout set in the object.
  1016. With an argument it sets the timeout to <EM>$secs</EM> and returns the
  1017. previous value.</P>
  1018. </DL>
  1019. <DL>
  1020. <DT><STRONG><A NAME="item_waitfor_%2D_wait_for_pattern_in_the_input"><STRONG>waitfor</STRONG> - wait for pattern in the input</A></STRONG><BR>
  1021. <DD>
  1022. <PRE>
  1023.     $ok = $obj->waitfor($matchop);
  1024.     $ok = $obj->waitfor([Match   => $matchop,]
  1025.                         [String  => $string,]
  1026.                         [Timeout => $secs,]);</PRE>
  1027. <PRE>
  1028.     ($prematch, $match) = $obj->waitfor($matchop);
  1029.     ($prematch, $match) = $obj->waitfor([Match   => $matchop,]
  1030.                                         [String  => $string,]
  1031.                                         [Timeout => $secs,]);</PRE>
  1032. <P>This method reads until a pattern match or string is found in the
  1033. input stream.  All the characters before and including the match are
  1034. removed from the input stream.  On time-out, eof, or other errors the
  1035. error mode action is performed.</P>
  1036. <P>In an array context the characters before the match and the matched
  1037. characters are returned in <EM>$prematch</EM> and <EM>$match</EM>.</P>
  1038. <P>You can specify more than one pattern or string by simply providing
  1039. multiple <EM>Match</EM> and/or <EM>String</EM> named arguments.  A <EM>$matchop</EM>
  1040. must be a string representing a valid Perl pattern match operator.
  1041. The <EM>$string</EM> is just a substring to find in the input stream.</P>
  1042. <P>Use <CODE>dump_log()</CODE> to debug when this method keeps timing-out and you
  1043. don't think it should.</P>
  1044. <P>An optional named argument is provided to override the current setting
  1045. of timeout.</P>
  1046. <P>To avoid unexpected backslash interpretation, always use single quotes
  1047. instead of double quotes to construct a match operator argument for
  1048. <CODE>prompt()</CODE> and <CODE>waitfor()</CODE> (e.g. <CODE>'/bash\$ $/'</CODE>).  If you're
  1049. constructing a DOS like file path, you'll need to use four backslashes
  1050. to represent one (e.g. <CODE>'/c:\\\\users\\\\bill>$/i'</CODE>).</P>
  1051. <P>Of course don't forget about regexp metacharacters like <CODE>.</CODE>, <CODE>[</CODE>, or
  1052. <CODE>$</CODE>.  You'll only need a single backslash to quote them.  The anchor
  1053. metacharacters <CODE>^</CODE> and <CODE>$</CODE> refer to positions in the input buffer.</P>
  1054. </DL>
  1055. <P>
  1056. <HR>
  1057. <H1><A NAME="see also">SEE ALSO</A></H1>
  1058. <DL>
  1059. <DT><STRONG><A NAME="item_RFC_854">RFC 854</A></STRONG><BR>
  1060. <DD>
  1061. TELNET Protocol Specification
  1062. <P><A HREF="ftp://ftp.isi.edu/in-notes/rfc854.txt">ftp://ftp.isi.edu/in-notes/rfc854.txt</A></P>
  1063. <P></P>
  1064. <DT><STRONG><A NAME="item_RFC_1143">RFC 1143</A></STRONG><BR>
  1065. <DD>
  1066. Q Method of Implementing TELNET Option Negotiation
  1067. <P><A HREF="ftp://ftp.isi.edu/in-notes/rfc1143.txt">ftp://ftp.isi.edu/in-notes/rfc1143.txt</A></P>
  1068. <P></P>
  1069. <DT><STRONG><A NAME="item_TELNET_Option_Assignments">TELNET Option Assignments</A></STRONG><BR>
  1070. <DD>
  1071. <A HREF="ftp://ftp.isi.edu/in-notes/iana/assignments/telnet-options">ftp://ftp.isi.edu/in-notes/iana/assignments/telnet-options</A>
  1072. <P></P></DL>
  1073. <P>
  1074. <HR>
  1075. <H1><A NAME="examples">EXAMPLES</A></H1>
  1076. <P>This example gets the current weather forecast for Brainerd, Minnesota.</P>
  1077. <PRE>
  1078.     my($forecast, $t);</PRE>
  1079. <PRE>
  1080.     use Net::Telnet ();
  1081.     $t = new Net::Telnet;
  1082.     $t->open("rainmaker.wunderground.com");</PRE>
  1083. <PRE>
  1084.     ## Wait for first prompt and "hit return".
  1085.     $t->waitfor('/continue:.*$/');
  1086.     $t->print("");</PRE>
  1087. <PRE>
  1088.     ## Wait for second prompt and respond with city code.
  1089.     $t->waitfor('/city code.*$/');
  1090.     $t->print("BRD");</PRE>
  1091. <PRE>
  1092.     ## Read and print the first page of forecast.
  1093.     ($forecast) = $t->waitfor('/[ \t]+press return to continue/i');
  1094.     print $forecast;</PRE>
  1095. <PRE>
  1096.     exit;</PRE>
  1097. <P>This example checks a POP server to see if you have mail.</P>
  1098. <PRE>
  1099.     my($hostname, $line, $passwd, $pop, $username);</PRE>
  1100. <PRE>
  1101.     $hostname = "your_destination_host_here";
  1102.     $username = "your_username_here";
  1103.     $passwd = "your_password_here";</PRE>
  1104. <PRE>
  1105.     use Net::Telnet ();
  1106.     $pop = new Net::Telnet (Telnetmode => 0);
  1107.     $pop->open(Host => $hostname,
  1108.                Port => 110);</PRE>
  1109. <PRE>
  1110.     ## Read connection message.
  1111.     $line = $pop->getline;
  1112.     die $line unless $line =~ /^\+OK/;</PRE>
  1113. <PRE>
  1114.     ## Send user name.
  1115.     $pop->print("user $username");
  1116.     $line = $pop->getline;
  1117.     die $line unless $line =~ /^\+OK/;</PRE>
  1118. <PRE>
  1119.     ## Send password.
  1120.     $pop->print("pass $passwd");
  1121.     $line = $pop->getline;
  1122.     die $line unless $line =~ /^\+OK/;</PRE>
  1123. <PRE>
  1124.     ## Request status of messages.
  1125.     $pop->print("list");
  1126.     $line = $pop->getline;
  1127.     print $line;</PRE>
  1128. <PRE>
  1129.     exit;</PRE>
  1130. <P>Here's an example you can use to down load a file of any type.  The
  1131. file is read from the remote host's standard output using cat.  To
  1132. prevent any output processing, the remote host's standard output is
  1133. put in raw mode using the Bourne shell.  The Bourne shell is used
  1134. because some shells, notably tcsh, prevent changing tty modes.  Upon
  1135. completion, FTP style statistics are printed to stderr.</P>
  1136. <PRE>
  1137.     my($block, $filename, $host, $hostname, $k_per_sec, $line,
  1138.        $num_read, $passwd, $prevblock, $prompt, $size, $size_bsd,
  1139.        $size_sysv, $start_time, $total_time, $username);</PRE>
  1140. <PRE>
  1141.     $hostname = "your_destination_host_here";
  1142.     $username = "your_username_here";
  1143.     $passwd = "your_password_here";
  1144.     $filename = "your_download_file_here";</PRE>
  1145. <PRE>
  1146.     ## Connect and login.
  1147.     use Net::Telnet ();
  1148.     $host = new Net::Telnet (Timeout => 30,
  1149.                              Prompt => '/[%#>] $/');
  1150.     $host->open($hostname);
  1151.     $host->login($username, $passwd);</PRE>
  1152. <PRE>
  1153.     ## Make sure prompt won't match anything in send data.
  1154.     $prompt = '_funkyPrompt_';
  1155.     $host->prompt("/$prompt\$/");
  1156.     $host->cmd("set prompt = '$prompt'");</PRE>
  1157. <PRE>
  1158.     ## Get size of file.
  1159.     ($line) = $host->cmd("/usr/bin/ls -l $filename");
  1160.     ($size_bsd, $size_sysv) = (split ' ', $line)[3,4];
  1161.     if ($size_sysv =~ /^\d+$/) {
  1162.         $size = $size_sysv;
  1163.     }
  1164.     elsif ($size_bsd =~ /^\d+$/) {
  1165.         $size = $size_bsd;
  1166.     }
  1167.     else {
  1168.         die "$filename: no such file on $hostname";
  1169.     }</PRE>
  1170. <PRE>
  1171.     ## Start sending the file.
  1172.     binmode STDOUT;
  1173.     $host->binmode(1);
  1174.     $host->print("/usr/bin/sh -c 'stty raw; cat $filename'");
  1175.     $host->getline;    # discard echoed back line</PRE>
  1176. <PRE>
  1177.     ## Read file a block at a time.
  1178.     $num_read = 0;
  1179.     $prevblock = '';
  1180.     $start_time = time;
  1181.     while (($block = $host->get) and ($block !~ /$prompt$/o)) {
  1182.         if (length $block >= length $prompt) {
  1183.             print $prevblock;
  1184.             $num_read += length $prevblock;
  1185.             $prevblock = $block;
  1186.         }
  1187.         else {
  1188.             $prevblock .= $block;
  1189.         }</PRE>
  1190. <PRE>
  1191.     }
  1192.     $host->close;</PRE>
  1193. <PRE>
  1194.     ## Print last block without trailing prompt.
  1195.     $prevblock .= $block;
  1196.     $prevblock =~ s/$prompt$//;
  1197.     print $prevblock;
  1198.     $num_read += length $prevblock;
  1199.     die "error: expected size $size, received size $num_read\n"
  1200.         unless $num_read == $size;</PRE>
  1201. <PRE>
  1202.     ## Print totals.
  1203.     $total_time = (time - $start_time) || 1;
  1204.     $k_per_sec = ($size / 1024) / $total_time;
  1205.     $k_per_sec = sprintf "%3.1f", $k_per_sec;
  1206.     warn("$num_read bytes received in $total_time seconds ",
  1207.          "($k_per_sec Kbytes/s)\n");</PRE>
  1208. <PRE>
  1209.     exit;</PRE>
  1210. <P>Here's an example that shows how to talk to a program that
  1211. must communicate via a terminal.  In this case we're talking
  1212. to the telnet program via a pseudo-terminal.  We use the
  1213. Comm package to start the telnet program and return a
  1214. filehandle to the pseudo-terminal.  This example sends some
  1215. initial commands and then allows the user to type commands
  1216. to the telnet session.</P>
  1217. <PRE>
  1218.     my($comm_pty, $host, $hostname, $passwd, $pty,
  1219.        $username, @lines);</PRE>
  1220. <PRE>
  1221.     $hostname = "your_host_here";
  1222.     $username = "your_name_here";
  1223.     $passwd = "your_passwd_here";</PRE>
  1224. <PRE>
  1225.     ## Start the telnet program so we can talk to it via a
  1226.     ## pseudo-terminal.
  1227.     {
  1228.         local $^W = 0;  # Comm.pl isn't warning clean</PRE>
  1229. <PRE>
  1230.         require "Comm.pl";
  1231.         &Comm::init("close_it", "interact",
  1232.                     "open_proc", "stty_raw", "stty_sane");
  1233.         $comm_pty = &open_proc("telnet $hostname")
  1234.             or die "open_proc failed";</PRE>
  1235. <PRE>
  1236.         ## Unfortunately the Comm package doesn't
  1237.         ## return us a fully qualified filehandle.  We
  1238.         ## must keep the filehandle Comm returned for
  1239.         ## its use and we must build another filehandle
  1240.         ## qualified with the current package for our
  1241.         ## use.
  1242.         $pty = "main::" . $comm_pty;
  1243.     }</PRE>
  1244. <PRE>
  1245.     ## Obtain a new Net::Telnet object that does I/O to the
  1246.     ## pseudo-terminal attached to the running telnet
  1247.     ## program.  The "Telnetmode" is "off" because we're
  1248.     ## not talking directly to a telnet port as we normally
  1249.     ## do, we're talking to a pseudo-terminal.  The
  1250.     ## "Output_record_separator" is now a carriage return
  1251.     ## because that's what you'd normally hit when you get
  1252.     ## done typing a line at a terminal.
  1253.     use Net::Telnet ();
  1254.     $host = new Net::Telnet (Fhopen => $pty,
  1255.                              Timeout => 10,
  1256.                              Prompt => '/[\$%#>] $/',
  1257.                              Output_record_separator => "\r",
  1258.                              Telnetmode => 0,
  1259.                              Cmd_remove_mode => 1);</PRE>
  1260. <PRE>
  1261.     ## Issue some commands.
  1262.     $host->login($username, $passwd);
  1263.     $host->cmd("setenv DISPLAY $ENV{DISPLAY}");
  1264.     print $host->cmd("who");</PRE>
  1265. <PRE>
  1266.     ## Allow the user to interact with telnet program until
  1267.     ## they exit.
  1268.     {
  1269.         no strict 'subs';  # so we can refer to STDIN
  1270.         local $^W = 0;     # Comm.pl isn't warning clean</PRE>
  1271. <PRE>
  1272.         &stty_raw(STDIN);
  1273.         &interact($comm_pty);
  1274.         &stty_sane(STDIN);
  1275.         &close_it($comm_pty);
  1276.     }</PRE>
  1277. <PRE>
  1278.     print "Exited telnet\n";
  1279.     exit;</PRE>
  1280. <P>
  1281. <HR>
  1282. <H1><A NAME="author">AUTHOR</A></H1>
  1283. <P>Jay Rogers <<A HREF="mailto:jay@rgrs.com">jay@rgrs.com</A>></P>
  1284. <P>
  1285. <HR>
  1286. <H1><A NAME="copyright">COPYRIGHT</A></H1>
  1287. <P>Copyright (c) 1997 Jay Rogers. All rights reserved.  This program is
  1288. free software; you can redistribute it and/or modify it under the same
  1289. terms as Perl itself.</P>
  1290. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  1291. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  1292. <STRONG><P CLASS=block> Net::Telnet - interact with TELNET port or other TCP ports</P></STRONG>
  1293. </TD></TR>
  1294. </TABLE>
  1295.  
  1296. </BODY>
  1297.  
  1298. </HTML>
  1299.