TerminalParam.cs
上传用户:szltgg
上传日期:2019-05-16
资源大小:604k
文件大小:43k
源码类别:

Telnet服务器

开发平台:

C#

  1. /*
  2. * Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3. * $Id: TerminalParam.cs,v 1.2 2005/04/20 08:45:48 okajima Exp $
  4. */
  5. using System;
  6. using System.Diagnostics;
  7. using System.Collections;
  8. using System.IO;
  9. using System.Text;
  10. using System.Windows.Forms;
  11. using System.Net;
  12. using System.Net.Sockets;
  13. using Poderosa.Terminal;
  14. #if !MACRODOC
  15. using Poderosa.Config;
  16. using Poderosa.Communication;
  17. using Poderosa.Text;
  18. using Poderosa.LocalShell;
  19. #endif
  20. using Poderosa.Toolkit;
  21. namespace Poderosa.ConnectionParam {
  22. /*
  23.  * TerminalParam偼儅僋儘偐傜傕僼儖偵傾僋僙僗壜擻偵偡傞偨傔public偵偡傞
  24.  * 岞奐偡傞昁梫偺側偄儊僜僢僪傪internal偵偡傞
  25.  */ 
  26. //Granados撪偺AuthenticationType偲摨堦偩偑丄婲摦偺崅懍壔偺偨傔巊傢側偄
  27. /// <summary>
  28. /// <ja>SSH偱偺擣徹曽朄傪帵偟傑偡丅</ja>
  29. /// <en>Specifies the authemtication method of SSH.</en>
  30. /// </summary>
  31. [EnumDesc(typeof(AuthType))]
  32. public enum AuthType {
  33. /// <summary>
  34. /// <ja>僷僗儚乕僪擣徹</ja>
  35. /// <en>Authentication using password.</en>
  36. /// </summary>
  37. [EnumValue(Description="Enum.AuthType.Password")]
  38. Password,
  39. /// <summary>
  40. /// <ja>庤尦偺旈枾尞偲儕儌乕僩儂僗僩偵搊榐偟偨岞奐尞傪巊偭偨擣徹</ja>
  41. /// <en>Authentication using the local private key and the remote public key.</en>
  42. /// </summary>
  43. [EnumValue(Description="Enum.AuthType.PublicKey")]
  44. PublicKey,
  45. /// <summary>
  46. /// <ja>僐儞僜乕儖忋偱僷僗儚乕僪傪擖椡偡傞擣徹</ja>
  47. /// <en>Authentication by sending the password through the console.</en>
  48. /// </summary>
  49. [EnumValue(Description="Enum.AuthType.KeyboardInteractive")]
  50. KeyboardInteractive
  51. }
  52. /// <summary>
  53. /// <ja>僄儞僐乕僨傿儞僌傪帵偟傑偡丅</ja>
  54. /// <en>Specifies the encoding of the connection.</en>
  55. /// <seealso cref="TerminalParam.Encoding"/>
  56. /// </summary>
  57. [EnumDesc(typeof(EncodingType))]
  58. public enum EncodingType {
  59. /// <summary>
  60. /// <ja>iso-8859-1</ja>
  61. /// <en>iso-8859-1</en>
  62. /// </summary>
  63. [EnumValue(Description="Enum.EncodingType.ISO8859_1")] ISO8859_1,
  64. /// <summary>
  65. /// <ja>utf-8</ja>
  66. /// <en>utf-8</en>
  67. /// </summary>
  68. [EnumValue(Description="Enum.EncodingType.UTF8")] UTF8,
  69. /// <summary>
  70. /// <ja>euc-jp</ja>
  71. /// <en>euc-jp (This encoding is primarily used with Japanese characters.)</en>
  72. /// </summary>
  73. [EnumValue(Description="Enum.EncodingType.EUC_JP")] EUC_JP,
  74. /// <summary>
  75. /// <ja>shift-jis</ja>
  76. /// <en>shift-jis (This encoding is primarily used with Japanese characters.)</en>
  77. /// </summary>
  78. [EnumValue(Description="Enum.EncodingType.SHIFT_JIS")] SHIFT_JIS
  79. }
  80. /// <summary>
  81. /// <ja>儘僌偺庬椶傪帵偟傑偡丅</ja>
  82. /// <en>Specifies the log type.</en>
  83. /// </summary>
  84. [EnumDesc(typeof(LogType))]
  85. public enum LogType {
  86. /// <summary>
  87. /// <ja>儘僌偼偲傝傑偣傫丅</ja>
  88. /// <en>The log is not recorded.</en>
  89. /// </summary>
  90. [EnumValue(Description="Enum.LogType.None")] None,
  91. /// <summary>
  92. /// <ja>僥僉僗僩儌乕僪偺儘僌偱偡丅偙傟偑昗弨偱偡丅</ja>
  93. /// <en>The log is a plain text file. This is standard.</en>
  94. /// </summary>
  95. [EnumValue(Description="Enum.LogType.Default")] Default,
  96. /// <summary>
  97. /// <ja>僶僀僫儕儌乕僪偺儘僌偱偡丅</ja>
  98. /// <en>The log is a binary file.</en>
  99. /// </summary>
  100. [EnumValue(Description="Enum.LogType.Binary")] Binary,
  101. /// <summary>
  102. /// <ja>XML偱曐懚偟傑偡丅傑偨撪晹揑側僶僌捛愓偵偍偄偰偙偺儌乕僪偱偺儘僌嵦庢傪偍婅偄偡傞偙偲偑偁傝傑偡丅</ja>
  103. /// <en>The log is an XML file. We may ask you to record the log in this type for debugging.</en>
  104. /// </summary>
  105. [EnumValue(Description="Enum.LogType.Xml")] Xml
  106. }
  107. /// <summary>
  108. /// <ja>憲怣帪偺夵峴偺庬椶傪帵偟傑偡丅</ja>
  109. /// <en>Specifies the new-line characters for transmission.</en>
  110. /// </summary>
  111. [EnumDesc(typeof(NewLine))]
  112. public enum NewLine {
  113. /// <summary>
  114. /// CR
  115. /// </summary>
  116. [EnumValue(Description="Enum.NewLine.CR")] CR,
  117. /// <summary>
  118. /// LF
  119. /// </summary>
  120. [EnumValue(Description="Enum.NewLine.LF")] LF,
  121. /// <summary>
  122. /// CR+LF
  123. /// </summary>
  124. [EnumValue(Description="Enum.NewLine.CRLF")] CRLF
  125. }
  126. /// <summary>
  127. /// <ja>僞乕儈僫儖偺庬暿傪帵偟傑偡丅</ja>
  128. /// <en>Specifies the type of the terminal.</en>
  129. /// </summary>
  130. /// <remarks>
  131. /// <ja>XTerm偵偼VT100偵偼側偄偄偔偮偐偺僄僗働乕僾僔乕働儞僗偑娷傑傟偰偄傑偡丅</ja>
  132. /// <en>XTerm supports several escape sequences in addition to VT100.</en>
  133. /// <ja>KTerm偼拞恎偼XTerm偲堦弿偱偡偑丄SSH傗Telnet偺愙懕僆僾僔儑儞偵偍偄偰僞乕儈僫儖偺庬椶傪帵偡暥帤楍偲偟偰"kterm"偑僙僢僩偝傟傑偡丅</ja>
  134. /// <en>Though the functionality of KTerm is identical to XTerm, the string "kterm" is used for specifying the type of the terminal in the connection of Telnet or SSH.</en>
  135. /// <ja>偙偺愝掕偼丄懡偔偺応崌TERM娐嫬曄悢偺抣偵塭嬁偟傑偡丅</ja>
  136. /// <en>In most cases, this setting affects the TERM environment variable.</en>
  137. /// </remarks>
  138. [EnumDesc(typeof(TerminalType))]
  139. public enum TerminalType {
  140. /// <summary>
  141. /// vt100
  142. /// </summary>
  143. [EnumValue(Description="Enum.TerminalType.VT100")] VT100,
  144. /// <summary>
  145. /// xterm
  146. /// </summary>
  147. [EnumValue(Description="Enum.TerminalType.XTerm")] XTerm,
  148. /// <summary>
  149. /// kterm
  150. /// </summary>
  151. [EnumValue(Description="Enum.TerminalType.KTerm")] KTerm
  152. }
  153. /// <summary>
  154. /// <ja>愙懕偺庬椶傪帵偟傑偡丅</ja>
  155. /// <en>Specifies the type of the connection.</en>
  156. /// </summary>
  157. public enum ConnectionMethod {
  158. /// <summary>
  159. /// Telnet
  160. /// </summary>
  161. Telnet,
  162. /// <summary>
  163. /// SSH1
  164. /// </summary>
  165. SSH1,
  166. /// <summary>
  167. /// SSH2
  168. /// </summary>
  169. SSH2
  170. }
  171. /// <summary>
  172. /// <ja>攚宨夋憸偺埵抲傪巜掕偟傑偡丅</ja>
  173. /// <en>Specifies the position of the background image.</en>
  174. /// </summary>
  175. [EnumDesc(typeof(ImageStyle))]
  176. public enum ImageStyle {
  177. /// <summary>
  178. /// <ja>拞墰</ja>
  179. /// <en>Center</en>
  180. /// </summary>
  181. [EnumValue(Description="Enum.ImageStyle.Center")] Center,
  182. /// <summary>
  183. /// <ja>嵍忋</ja>
  184. /// <en>Upper left corner</en>
  185. /// </summary>
  186. [EnumValue(Description="Enum.ImageStyle.TopLeft")] TopLeft,
  187. /// <summary>
  188. /// <ja>塃忋</ja>
  189. /// <en>Upper right corner</en>
  190. /// </summary>
  191. [EnumValue(Description="Enum.ImageStyle.TopRight")] TopRight,
  192. /// <summary>
  193. /// <ja>嵍壓</ja>
  194. /// <en>Lower left corner</en>
  195. /// </summary>
  196. [EnumValue(Description="Enum.ImageStyle.BottomLeft")] BottomLeft,
  197. /// <summary>
  198. /// <ja>塃壓</ja>
  199. /// <en>Lower right corner</en>
  200. /// </summary>
  201. [EnumValue(Description="Enum.ImageStyle.BottomRight")] BottomRight,
  202. /// <summary>
  203. /// <ja>怢弅偟偰慡懱偵昞帵</ja>
  204. /// <en>The image covers the whole area of the console by expansion</en>
  205. /// </summary>
  206. [EnumValue(Description="Enum.ImageStyle.Scaled")] Scaled
  207. }
  208. /// <summary>
  209. /// <ja>庴怣偟偨暥帤偵懳偡傞夵峴曽朄傪帵偟傑偡丅</ja>
  210. /// <en>Specifies line breaking style.</en>
  211. /// </summary>
  212. [EnumDesc(typeof(LineFeedRule))]
  213. public enum LineFeedRule {
  214. /// <summary>
  215. /// <ja>昗弨</ja>
  216. /// <en>Standard</en>
  217. /// </summary>
  218. [EnumValue(Description="Enum.LineFeedRule.Normal")] Normal,
  219. /// <summary>
  220. /// <ja>LF偱夵峴偟CR傪柍帇</ja>
  221. /// <en>LF:Line Break, CR:Ignore</en>
  222. /// </summary>
  223. [EnumValue(Description="Enum.LineFeedRule.LFOnly")] LFOnly,
  224. /// <summary>
  225. /// <ja>CR偱夵峴偟LF傪柍帇</ja>
  226. /// <en>CR:Line Break, LF:Ignore</en>
  227. /// </summary>
  228. [EnumValue(Description="Enum.LineFeedRule.CROnly")] CROnly
  229. }
  230. /// <summary>
  231. /// <ja>愙懕傪奐偔偲偒偺僷儔儊乕僞偺婎掙僋儔僗偱偡丅</ja>
  232. /// <en>Implements the basic functionality common to connections.</en>
  233. /// <seealso cref="TCPTerminalParam"/>
  234. /// <seealso cref="TelnetTerminalParam"/>
  235. /// <seealso cref="SSHTerminalParam"/>
  236. /// <seealso cref="SerialTerminalParam"/>
  237. /// <seealso cref="CygwinTerminalParam"/>
  238. /// </summary>
  239. [Serializable()]
  240. public abstract class TerminalParam : ICloneable {
  241. internal EncodingType _encoding;
  242. internal TerminalType _terminalType;
  243. internal LogType _logtype;
  244. internal string _logpath;
  245. internal bool _logappend;
  246. internal bool _localecho;
  247. internal LineFeedRule _lineFeedRule;
  248. internal NewLine _transmitnl;
  249. internal string _caption;
  250. internal RenderProfile _renderProfile;
  251. internal TerminalParam() {
  252. _encoding = EncodingType.EUC_JP;
  253. _logtype = LogType.None;
  254. _terminalType = TerminalType.XTerm;
  255. _localecho = false;
  256. _lineFeedRule = LineFeedRule.Normal;
  257. _transmitnl = NewLine.CR;
  258. _renderProfile = null;
  259. }
  260. internal TerminalParam(TerminalParam r) {
  261. Import(r);
  262. }
  263. internal void Import(TerminalParam r) {
  264. _encoding = r._encoding;
  265. _logtype = r._logtype;
  266. _logpath = r._logpath;
  267. _localecho = r._localecho;
  268. _transmitnl = r._transmitnl;
  269. _lineFeedRule = r._lineFeedRule;
  270. _terminalType = r._terminalType;
  271. _renderProfile = r._renderProfile==null? null : new RenderProfile(r._renderProfile);
  272. _caption = r._caption;
  273. }
  274. /// 
  275. /// 
  276. /// 
  277. /// 
  278. public override bool Equals(object t_) {
  279. TerminalParam t = t_ as TerminalParam;
  280. if(t==null) return false;
  281. return
  282. _encoding==t.Encoding &&
  283. _localecho==t.LocalEcho &&
  284. _transmitnl==t.TransmitNL &&
  285. _lineFeedRule==t.LineFeedRule &&
  286. _terminalType==t.TerminalType;
  287. }
  288. /// 
  289. /// 
  290. /// 
  291. public override int GetHashCode() {
  292. return _encoding.GetHashCode() + _localecho.GetHashCode()*2 + _transmitnl.GetHashCode()*3 + _lineFeedRule.GetHashCode()*4 + _terminalType.GetHashCode()*5;
  293. }
  294. /// 
  295. /// 
  296. /// 
  297. public abstract object Clone();
  298. #if !MACRODOC
  299. public abstract string Description { get; }
  300. public abstract string ShortDescription { get; }
  301. public abstract string MethodName { get; }
  302. public virtual void Export(ConfigNode node) {
  303. node["encoding"] = EnumDescAttribute.For(typeof(EncodingType)).GetDescription(_encoding);
  304. node["terminal-type"] = EnumDescAttribute.For(typeof(TerminalType)).GetName(_terminalType);
  305. node["transmit-nl"] = EnumDescAttribute.For(typeof(NewLine)).GetName(_transmitnl);
  306. node["localecho"] = _localecho.ToString();
  307. node["linefeed"] = EnumDescAttribute.For(typeof(LineFeedRule)).GetName(_lineFeedRule);
  308. if(_caption!=null && _caption.Length>0) node["caption"] = _caption;
  309. if(_renderProfile!=null) _renderProfile.Export(node);
  310. }
  311. public virtual void Import(ConfigNode data) {
  312. _encoding = ParseEncoding(data["encoding"]);
  313. _terminalType = (TerminalType)EnumDescAttribute.For(typeof(TerminalType)).FromName(data["terminal-type"], TerminalType.VT100);
  314. _transmitnl = (NewLine)EnumDescAttribute.For(typeof(NewLine)).FromName(data["transmit-nl"], NewLine.CR);
  315. _localecho = GUtil.ParseBool(data["localecho"], false);
  316. //_lineFeedByCR = GUtil.ParseBool((string)data["linefeed-by-cr"], false);
  317. _lineFeedRule = (LineFeedRule)EnumDescAttribute.For(typeof(LineFeedRule)).FromName(data["linefeed"], LineFeedRule.Normal);
  318. _caption = data["caption"];
  319. if(data.Contains("font-name")) //崁栚偑側偗傟偽嬻偺傑傑
  320. _renderProfile = new RenderProfile(data);
  321. }
  322. public EncodingProfile EncodingProfile {
  323. get {
  324. return EncodingProfile.Get(_encoding);
  325. }
  326. set {
  327. _encoding = value.Type;
  328. }
  329. }
  330. #endif
  331. /// <summary>
  332. /// <ja>偙偺TerminalParam偱愙懕傪奐偄偨偲偒偺怓丒僼僅儞僩側偳偺愝掕傪廂榐偟偨僆僽僕僃僋僩偱偡丅</ja>
  333. /// <en>Gets or sets the appearances of the console such as colors or fonts.</en>
  334. /// </summary>
  335. /// <remarks>
  336. /// <ja>摿偵壗傕巜掕偟側偐偄偐null傪僙僢僩偡傞偲丄僆僾僔儑儞僟僀傾儘僌偱愝掕偟偨撪梕偑巊梡偝傟傑偡丅</ja>
  337. /// <en>If you do not set anything or set null, the appearance is same as the setting of the option dialo.</en>
  338. /// </remarks>
  339. /// <seealso cref="RenderProfile"/>
  340. public RenderProfile RenderProfile {
  341. get {
  342. return _renderProfile;
  343. }
  344. set {
  345. _renderProfile = value;
  346. }
  347. }
  348. /// <summary>
  349. /// <ja>偙偺愙懕偺僄儞僐乕僨傿儞僌偱偡丅</ja>
  350. /// <en>Gets or sets the encoding of the connection.</en>
  351. /// </summary>
  352. public EncodingType Encoding {
  353. get {
  354. return _encoding;
  355. }
  356. set {
  357. _encoding = value;
  358. }
  359. }
  360. /// <summary>
  361. /// <ja>僞乕儈僫儖偺庬暿偱偡丅</ja>
  362. /// <en>Gets or sets the type of the terminal.</en>
  363. /// </summary>
  364. public TerminalType TerminalType {
  365. get {
  366. return _terminalType;
  367. }
  368. set {
  369. _terminalType = value;
  370. }
  371. }
  372. /// <summary>
  373. /// <ja>儘僌偺庬暿偱偡丅</ja>
  374. /// <en>Gets or sets the type of the log.</en>
  375. /// </summary>
  376. public LogType LogType {
  377. get {
  378. return _logtype;
  379. }
  380. set {
  381. _logtype = value;
  382. }
  383. }
  384. /// <summary>
  385. /// <ja>儘僌僼傽僀儖偺僼儖僷僗偱偡丅</ja>
  386. /// <en>Gets or sets the full path of the log file.</en>
  387. /// </summary>
  388. public string LogPath {
  389. get {
  390. return _logpath;
  391. }
  392. set {
  393. _logpath = value;
  394. }
  395. }
  396. /// <summary>
  397. /// <ja>儘僌偺庬暿偲僼傽僀儖柤傪僆僾僔儑儞僟僀傾儘僌偱巜掕偟偨撪梕偵婎偯偒帺摦揑偵愝掕偟傑偡丅</ja>
  398. /// <en>Sets the type and the file name of the log based on the settings in the option dialog.</en>
  399. /// </summary>
  400. public void AutoFillLogPath() {
  401. #if !MACRODOC
  402. _logtype = GEnv.Options.DefaultLogType;
  403. if(_logtype!=LogType.None)
  404. _logpath = GUtil.CreateLogFileName(this.ShortDescription);
  405. else
  406. _logpath = "";
  407. #endif
  408. }
  409. /// <summary>
  410. /// <ja>摨柤僼傽僀儖偑偁傞応崌丄儘僌僼傽僀儖偵捛婰偡傞偐忋彂偒偡傞偐傪巜掕偟傑偡丅</ja>
  411. /// <en>Specifies whether the connection appends or overwrites the log file in case that the file exists already.</en>
  412. /// </summary>
  413. public bool LogAppend {
  414. get {
  415. return _logappend;
  416. }
  417. set {
  418. _logappend = false;
  419. }
  420. }
  421. /// <summary>
  422. /// <ja>憲怣帪偺夵峴愝掕偱偡丅</ja>
  423. /// <en>Gets or sets the new-line characters for transmission.</en>
  424. /// </summary>
  425. public NewLine TransmitNL {
  426. get {
  427. return _transmitnl;
  428. }
  429. set {
  430. _transmitnl = value;
  431. }
  432. }
  433. /// <summary>
  434. /// <ja>儘乕僇儖僄僐乕傪偡傞偐偳偆偐偱偡丅</ja>
  435. /// <en>Specifies whether the local echo is performed.</en>
  436. /// </summary>
  437. public bool LocalEcho {
  438. get {
  439. return _localecho;
  440. }
  441. set {
  442. _localecho = value;
  443. }
  444. }
  445. /// <summary>
  446. /// <ja>庴怣偟偨暥帤偵懳偟偰夵峴偡傞偐偳偆偐偱偡丅</ja>
  447. /// <en>Specifies line breaking style corresponding to received characters.</en>
  448. /// </summary>
  449. public LineFeedRule LineFeedRule {
  450. get {
  451. return _lineFeedRule;
  452. }
  453. set {
  454. _lineFeedRule = value;
  455. }
  456. }
  457. /// <summary>
  458. /// <ja>僞僽側偳偵昞帵偡傞偨傔偺尒弌偟偱偡丅</ja>
  459. /// <en>Gets or sets the caption of the tab.</en>
  460. /// <ja>摿偵僙僢僩偟側偄応崌丄愙懕愭偺儂僗僩柤傪棙梡偟偰帺摦揑偵偮偗傜傟傑偡丅</ja>
  461. /// <en>If you do not specify anything, the caption is set automatically using the host name.</en>
  462. /// </summary>
  463. public string Caption {
  464. get {
  465. return _caption;
  466. }
  467. set {
  468. _caption = value;
  469. }
  470. }
  471. #if !MACRODOC
  472. public void FeedLogOption() {
  473. if(GEnv.Options.DefaultLogType!=LogType.None) {
  474. _logtype = GEnv.Options.DefaultLogType;
  475. _logpath = GUtil.CreateLogFileName(this.ShortDescription);
  476. }
  477. }
  478. public static TerminalParam CreateFromConfigNode(ConfigNode sec) {
  479. string type = sec["type"];
  480. TerminalParam param;
  481. if(type=="serial")
  482. param = new SerialTerminalParam();
  483. else if(type=="tcp") {
  484. ConnectionMethod cm = ParseMethod(sec["method"]);
  485. if(cm==ConnectionMethod.Telnet)
  486. param = new TelnetTerminalParam();
  487. else
  488. param = new SSHTerminalParam();
  489. }
  490. else if(type=="cygwin")
  491. param = new CygwinTerminalParam();
  492. else if(type=="sfu")
  493. param = new SFUTerminalParam();
  494. else
  495. throw new Exception("invalid format");
  496. param.Import(sec);
  497. return param;
  498. }
  499. private static EncodingType ParseEncoding(string val) {
  500. return (EncodingType)EnumDescAttribute.For(typeof(EncodingType)).FromDescription(val, EncodingType.UTF8);
  501. }
  502. protected static ConnectionMethod ParseMethod(string val) {
  503. if(val=="SSH1")
  504. return ConnectionMethod.SSH1;
  505. if(val=="SSH2")
  506. return ConnectionMethod.SSH2;
  507. if(val=="Telnet")
  508. return ConnectionMethod.Telnet;
  509. throw new FormatException(String.Format("{0} is unkown method", val));
  510. }
  511. #endif
  512. }
  513. /// <summary>
  514. /// <ja>TCP偵婎偯偄偨愙懕偺僷儔儊乕僞傪昞尰偟傑偡丅</ja>
  515. /// <en>Implements the parameters of the connection using TCP. (i.e. Telnet and SSH)</en>
  516. /// <seealso cref="TelnetTerminalParam"/>
  517. /// <seealso cref="SSHTerminalParam"/>
  518. /// </summary>
  519. [Serializable()]
  520. public abstract class TCPTerminalParam : TerminalParam {
  521. internal string _host;
  522. internal int _port;
  523. internal ConnectionMethod _method;
  524. internal TCPTerminalParam() {
  525. _method = ConnectionMethod.Telnet;
  526. }
  527. internal TCPTerminalParam(TCPTerminalParam r) : base(r) {
  528. _host = r._host;
  529. _port = r._port;
  530. _method = r._method;
  531. }
  532. internal void Import(TCPTerminalParam r) {
  533. base.Import(r);
  534. _host = r._host;
  535. _port = r._port;
  536. _method = r._method;
  537. }
  538. /// 
  539. /// 
  540. /// 
  541. public override bool Equals(object t_) {
  542. TCPTerminalParam t = t_ as TCPTerminalParam;
  543. if(t==null) return false;
  544. return base.Equals(t) && _host==t.Host && _port==t.Port && _method==t.Method;
  545. }
  546. /// 
  547. /// 
  548. /// 
  549. public override int GetHashCode() {
  550. return base.GetHashCode() + _host.GetHashCode() + _port.GetHashCode()*2 + _method.GetHashCode()*3;
  551. }
  552. /// <summary>
  553. /// <ja>愙懕愭偺儂僗僩柤偱偡丅</ja>
  554. /// <en>Gets or sets the host name.</en>
  555. /// </summary>
  556. /// <remarks>
  557. /// <ja>傑偨偼"192.168.10.1"側偳偺IP傾僪儗僗偺暥帤楍昞尰傕壜擻偱偡丅</ja>
  558. /// <en>The IP address format such as "192.168.10.1" is also allowed.</en>
  559. /// </remarks>
  560. public virtual string Host {
  561. get {
  562. return _host;
  563. }
  564. set {
  565. _host = value;
  566. }
  567. }
  568. /// <summary>
  569. /// <ja>愙懕愭偺億乕僩斣崋偱偡丅</ja>
  570. /// <en>Gets or sets the port number.</en>
  571. /// </summary>
  572. public virtual int Port {
  573. get {
  574. return _port;
  575. }
  576. set {
  577. _port = value;
  578. }
  579. }
  580. /// <summary>
  581. /// <ja>愙懕偺庬暿偱偡丅</ja>
  582. /// <en>Gets or sets the connection method.</en>
  583. /// </summary>
  584. public virtual ConnectionMethod Method {
  585. get {
  586. return _method;
  587. }
  588. set {
  589. #if !MACRODOC
  590. throw new ArgumentException(GEnv.Strings.GetString("Message.TCPTerminalParam.PropCannotBeSet"));
  591. #endif
  592. }
  593. }
  594. /// <summary>
  595. /// <ja>偙偺愙懕偑SSH偱偁傟偽true偱偡丅</ja>
  596. /// <en>Returns true if the connection method is SSH.</en>
  597. /// </summary>
  598. public bool IsSSH {
  599. get {
  600. return _method==ConnectionMethod.SSH1 || _method==ConnectionMethod.SSH2;
  601. }
  602. }
  603. #if !MACRODOC
  604. public override void Export(ConfigNode node) {
  605. node["type"] = "tcp";
  606. node["host"] = _host;
  607. node["port"] = _port.ToString();
  608. node["method"] = _method.ToString();
  609. base.Export(node);
  610. }
  611. public override void Import(ConfigNode data) {
  612. _host = data["host"];
  613. _port = ParsePort(data["port"]);
  614. _method = ParseMethod(data["method"]);
  615. base.Import(data);
  616. }
  617. //TerminalUtil傊堏摦偡傋偒偐傕
  618. private static int ParsePort(string val) {
  619. try {
  620. return Int32.Parse(val);
  621. }
  622. catch(FormatException e) {
  623. throw e;
  624. }
  625. }
  626. public static TCPTerminalParam Fake {
  627. get {
  628. TelnetTerminalParam p = new TelnetTerminalParam();
  629. p.EncodingProfile = EncodingProfile.Get(EncodingType.EUC_JP);
  630. return p;
  631. }
  632. }
  633. public override string ShortDescription {
  634. get {
  635. return _host;
  636. }
  637. }
  638. public override string MethodName {
  639. get {
  640. return _method==ConnectionMethod.SSH1? "SSH1" : _method==ConnectionMethod.SSH2? "SSH2" : "telnet";
  641. }
  642. }
  643. #endif
  644. }
  645. /// <summary>
  646. /// <ja>Telnet偵傛傞愙懕僷儔儊乕僞傪帵偡僋儔僗</ja>
  647. /// <en>Implements the parameters of the Telnet connections.</en>
  648. /// </summary>
  649. [Serializable()]
  650. public class TelnetTerminalParam : TCPTerminalParam {
  651. /// <summary>
  652. /// <ja>儂僗僩柤傪巜掕偟偰嶌惉偟傑偡丅</ja>
  653. /// <en>Initializes with the host name.</en>
  654. /// <seealso cref="Poderosa.Macro.ConnectionList.Open"/>
  655. /// </summary>
  656. /// <remarks>
  657. /// <ja>億乕僩偼23偵愝掕偝傟傑偡丅</ja>
  658. /// <en>The port number is set to 23.</en>
  659. /// <ja>懠偺僷儔儊乕僞偼師偺傛偆偵弶婜壔偝傟傑偡丅</ja>
  660. /// <en>Other parameters are initialized as following:</en>
  661. /// <list type="table">
  662. ///   <item><term><ja>僄儞僐乕僨傿儞僌</ja><en>Encoding</en></term><description><ja>EUC-JP</ja><en>iso-8859-1</en></description></item>丂
  663. ///   <item><term><ja>僞乕儈僫儖僞僀僾</ja><en>Terminal Type</en></term><description>xterm</description></item>  
  664. ///   <item><term><ja>儘僌</ja><en>Log</en></term><description><ja>庢摼偟側偄</ja><en>None</en></description></item>丂丂丂丂丂丂丂
  665. ///   <item><term><ja>儘乕僇儖僄僐乕</ja><en>Local echo</en></term><description><ja>偟側偄</ja><en>Don't</en></description></item>丂丂
  666. ///   <item><term><ja>憲怣帪夵峴</ja><en>New line</en></term><description>CR</description></item>丂丂丂丂
  667. /// </list>
  668. /// <ja>愙懕傪奐偔偵偼丄<see cref="Poderosa.Macro.ConnectionList.Open"/>儊僜僢僪偺堷悢偲偟偰TelnetTerminalParam僆僽僕僃僋僩傪搉偟傑偡丅</ja>
  669. /// <en>To open a new connection, pass the TelnetTerminalParam object to the <see cref="Poderosa.Macro.ConnectionList.Open"/> method.</en>
  670. /// </remarks>
  671. /// <param name="host"><ja>儂僗僩柤</ja><en>The host name.</en></param>
  672. public TelnetTerminalParam(string host) {
  673. _method = ConnectionMethod.Telnet;
  674. _host = host;
  675. _port = 23;
  676. }
  677. internal TelnetTerminalParam() {
  678. _method = ConnectionMethod.Telnet;
  679. }
  680. internal TelnetTerminalParam(TelnetTerminalParam r) : base(r) {
  681. }
  682. /// 
  683. /// 
  684. /// 
  685. public override object Clone() {
  686. return new TelnetTerminalParam(this);
  687. }
  688. #if !MACRODOC
  689. public override void Import(ConfigNode data) {
  690. base.Import(data);
  691. }
  692. public  override string Description {
  693. get {
  694. return _host;
  695. }
  696. }
  697. #endif
  698. }
  699. /// <summary>
  700. /// <ja>SSH偵傛傞愙懕僷儔儊乕僞偱偡丅</ja>
  701. /// <en>Implements the parameters of SSH connections.</en>
  702. /// </summary>
  703. [Serializable()]
  704. public class SSHTerminalParam : TCPTerminalParam {
  705. internal string _account;
  706. internal string _passphrase; //偙傟偼僔儕傾儔僀僘偺懳徾奜丅儊儌儕忋偵帩偮偐偳偆偐傕僆僾僔儑儞
  707. internal AuthType _auth;
  708. internal string _identityfile;
  709. /// <summary>
  710. /// <ja>儂僗僩柤丄傾僇僂儞僩丄僷僗儚乕僪傪巜掕偟偰嶌惉偟傑偡丅</ja>
  711. /// <en>Initializes with the host name, the account, and the password.</en>
  712. /// <seealso cref="Poderosa.Macro.ConnectionList.Open"/>
  713. /// </summary>
  714. /// <remarks>
  715. /// <ja>億乕僩偼22偵愝掕偝傟傑偡丅</ja>
  716. /// <en>The port number is set to 22.</en>
  717. /// <ja>懠偺僷儔儊乕僞偼師偺傛偆偵弶婜壔偝傟傑偡丅</ja>
  718. /// <en>Other parameters are initialized as following:</en>
  719. /// <list type="table">
  720. ///   <item><term><ja>僄儞僐乕僨傿儞僌</ja><en>Encoding</en></term><description><ja>EUC-JP</ja><en>iso-8859-1</en></description></item>丂
  721. ///   <item><term><ja>僞乕儈僫儖僞僀僾</ja><en>Terminal Type</en></term><description>xterm</description></item>  
  722. ///   <item><term><ja>儘僌</ja><en>Log</en></term><description><ja>庢摼偟側偄</ja><en>None</en></description></item>丂丂丂丂丂丂丂
  723. ///   <item><term><ja>儘乕僇儖僄僐乕</ja><en>Local echo</en></term><description><ja>偟側偄</ja><en>Don't</en></description></item>丂丂
  724. ///   <item><term><ja>憲怣帪夵峴</ja><en>New line</en></term><description>CR</description></item>丂丂丂丂
  725. ///   <item><term><ja>擣徹曽朄</ja><en>Authentication Method</en></term><description><ja>僷僗儚乕僪</ja><en>Password</en></description></item>丂丂丂丂
  726. /// </list>
  727. /// <ja>愙懕傪奐偔偵偼丄ConnectionList僆僽僕僃僋僩偺<see cref="Poderosa.Macro.ConnectionList.Open"/>儊僜僢僪偺堷悢偲偟偰SSHTerminalParam僆僽僕僃僋僩傪搉偟傑偡丅</ja>
  728. /// <en>To open a new connection, pass the SSHTerminalParam object to the <see cref="Poderosa.Macro.ConnectionList.Open"/> method of the ConnectionList object.</en>
  729. /// </remarks>
  730. /// <param name="method"><ja>SSH1傑偨偼SSH2</ja><en>SSH1 or SSH2.</en></param>
  731. /// <param name="host"><ja>儂僗僩柤</ja><en>The host name.</en></param>
  732. /// <param name="account"><ja>傾僇僂儞僩柤</ja><en>The account</en></param>
  733. /// <param name="password"><ja>僷僗儚乕僪傑偨偼旈枾尞偺僷僗僼儗乕僘</ja><en>The password or the passphrase of the private key.</en></param>
  734. public SSHTerminalParam(ConnectionMethod method, string host, string account, string password) {
  735. if(method==ConnectionMethod.Telnet) throw new ArgumentException("Telnet is specified in the constructor of SSHTerminalParam");
  736. _method = method;
  737. _host = host;
  738. _port = 22;
  739. _account = account;
  740. _passphrase = password;
  741. _auth = AuthType.Password;
  742. }
  743. internal SSHTerminalParam(SSHTerminalParam r) : base(r) {
  744. _account = r._account;
  745. _auth = r._auth;
  746. _identityfile = r._identityfile;
  747. _passphrase = r._passphrase;
  748. }
  749. internal SSHTerminalParam() {
  750. _method = ConnectionMethod.SSH2;
  751. _auth = AuthType.Password;
  752. _port = 22;
  753. }
  754. /// 
  755. /// 
  756. /// 
  757. public override object Clone() {
  758. return new SSHTerminalParam(this);
  759. }
  760. /// 
  761. /// 
  762. /// 
  763. public override bool Equals(object t_) {
  764. SSHTerminalParam t = t_ as SSHTerminalParam;
  765. if(t==null) return false;
  766. return base.Equals(t) && _account==t.Account && _auth==t.AuthType;
  767. }
  768. /// 
  769. /// 
  770. /// 
  771. public override int GetHashCode() {
  772. return base.GetHashCode() + _account.GetHashCode() + _auth.GetHashCode()*2;
  773. }
  774. /// <summary>
  775. /// <ja>傾僇僂儞僩柤偱偡丅</ja>
  776. /// <en>Gets or sets the account.</en>
  777. /// </summary>
  778. public string Account {
  779. get {
  780. return _account;
  781. }
  782. set {
  783. _account = value;
  784. }
  785. }
  786. /// <summary>
  787. /// <ja>愙懕偺庬暿偱偡丅</ja>
  788. /// <en>Gets or sets the connection method.</en>
  789. /// </summary>
  790. public override ConnectionMethod Method {
  791. set {
  792. #if !MACRODOC
  793. if(value==ConnectionMethod.Telnet)
  794. throw new ArgumentException(GEnv.Strings.GetString("Mesage.SSHTerminalParam.MethodSetError"));
  795. _method = value;
  796. #endif
  797. }
  798. }
  799. /// <summary>
  800. /// <ja>儐乕僓擣徹偺曽朄偱偡丅</ja>
  801. /// <en>Gets or sets the authentication method.</en>
  802. /// </summary>
  803. /// <remarks>
  804. /// <para><ja>偙傟傪PublicKey偵偟偨応崌丄IdentityFile僾儘僷僥傿偼旈枾尞僼傽僀儖傪巜偟偰偄側偄偲偄偗傑偣傫丅</ja>
  805. /// <en>If the PublicKey is specified, the IdentityFile property must indicate a correct private key file.</en></para>
  806. /// <para><ja>Password偵偟偨応崌丄Passphrase僾儘僷僥傿偺抣偑僷僗儚乕僪偲偟偰巊傢傟傑偡丅</ja>
  807. /// <en>If the Password is specified, the value of the Passphrase property is used as the login password.</en></para>
  808. /// <para><ja>儅僋儘偐傜偼丄KeyboardInteractive傪僙僢僩偟側偄偱偔偩偝偄丅</ja>
  809. /// <en>The macro cannot use KeyboardInteractive method.</en></para>
  810. /// </remarks>
  811. public AuthType AuthType {
  812. get {
  813. return _auth;
  814. }
  815. set {
  816. _auth = value;
  817. }
  818. }
  819. /// <summary>
  820. /// <ja>旈枾尞偺僼傽僀儖偱偡丅</ja>
  821. /// <en>Gets or sets the file name of the private key.</en>
  822. /// </summary>
  823. /// <remarks>
  824. /// <ja>僼儖僷僗偱巜掕偟偰偔偩偝偄丅</ja>
  825. /// <en>The full path is required.</en>
  826. /// </remarks>
  827. public string IdentityFile {
  828. get {
  829. return _identityfile;
  830. }
  831. set {
  832. _identityfile = value;
  833. }
  834. }
  835. /// <summary>
  836. /// <ja>僷僗儚乕僪傑偨偼僷僗僼儗乕僘偱偡丅</ja>
  837. /// <en>Gets or sets the password or the passphrase.</en>
  838. /// </summary>
  839. /// <remarks>
  840. /// <ja>岞奐尞擣徹偺応崌偼偙偺僾儘僷僥傿偺抣偑僷僗僼儗乕僘偲偟偰巊傢傟傑偡丅</ja>
  841. /// <en>In case of the public key authentication, the value of this property is used as the passphrase of the private key.</en>
  842. /// <ja>僷僗儚乕僪擣徹偺応崌偼僷僗儚乕僪偵側傝傑偡丅</ja>
  843. /// <en>In case of the password authentication, it is used as the login password.</en>
  844. /// </remarks>
  845. public string Passphrase {
  846. get {
  847. return _passphrase;
  848. }
  849. set {
  850. _passphrase = value;
  851. }
  852. }
  853. private static AuthType ParseAuth(string val) {
  854. if(val=="Password")
  855. return AuthType.Password;
  856. if(val=="PublicKey")
  857. return AuthType.PublicKey;
  858. if(val=="KeyboardInteractive")
  859. return AuthType.KeyboardInteractive;
  860. throw new FormatException(String.Format("{0} is unkown authentication option", val));
  861. }
  862. #if !MACRODOC
  863. public override sealed void Export(ConfigNode node) {
  864. base.Export(node);
  865. node["account"] = _account;
  866. node["auth"] = _auth.ToString();
  867. if(_auth==AuthType.PublicKey)
  868. node["keyfile"] = _identityfile;
  869. }
  870. public override void Import(ConfigNode data) {
  871. base.Import(data);
  872. _method = ParseMethod(data["method"]);
  873. Debug.Assert(this.IsSSH);
  874. _account = data["account"];
  875. _auth = ParseAuth(data["auth"]);
  876. if(_auth==AuthType.PublicKey)
  877. _identityfile = data["keyfile"];
  878. _passphrase = data["passphrase"];
  879. }
  880. public override string Description {
  881. get {
  882. string t;
  883. if(_account.Length > 0)
  884. t = _account + "@" + _host;
  885. else
  886. t = _host;
  887. return t;
  888. }
  889. }
  890. #endif
  891. }
  892. /// <summary>
  893. /// <ja>僼儘乕僐儞僩儘乕儖偺愝掕</ja>
  894. /// <en>Specifies the flow control.</en>
  895. /// </summary>
  896. [EnumDesc(typeof(FlowControl))]
  897. public enum FlowControl {
  898. /// <summary>
  899. /// <ja>側偟</ja>
  900. /// <en>None</en>
  901. /// </summary>
  902. [EnumValue(Description="Enum.FlowControl.None")] None,
  903. /// <summary>
  904. /// X ON / X OFf
  905. /// </summary>
  906. [EnumValue(Description="Enum.FlowControl.Xon_Xoff")] Xon_Xoff,
  907. /// <summary>
  908. /// <ja>僴乕僪僂僃傾</ja>
  909. /// <en>Hardware</en>
  910. /// </summary>
  911. [EnumValue(Description="Enum.FlowControl.Hardware")] Hardware
  912. }
  913. /// <summary>
  914. /// <ja>僷儕僥傿偺愝掕</ja>
  915. /// <en>Specifies the parity.</en>
  916. /// </summary>
  917. [EnumDesc(typeof(Parity))]
  918. public enum Parity {
  919. /// <summary>
  920. /// <ja>側偟</ja>
  921. /// <en>None</en>
  922. /// </summary>
  923. [EnumValue(Description="Enum.Parity.NOPARITY")] NOPARITY = 0,
  924. /// <summary>
  925. /// <ja>婏悢</ja>
  926. /// <en>Odd</en>
  927. /// </summary>
  928. [EnumValue(Description="Enum.Parity.ODDPARITY")] ODDPARITY   =        1,
  929. /// <summary>
  930. /// <ja>嬼悢</ja>
  931. /// <en>Even</en>
  932. /// </summary>
  933. [EnumValue(Description="Enum.Parity.EVENPARITY")] EVENPARITY  =        2
  934. //MARKPARITY  =        3,
  935. //SPACEPARITY =        4
  936. }
  937. /// <summary>
  938. /// <ja>僗僩僢僾價僢僩偺愝掕</ja>
  939. /// <en>Specifies the stop bits.</en>
  940. /// </summary>
  941. [EnumDesc(typeof(StopBits))]
  942. public enum StopBits {
  943. /// <summary>
  944. /// <ja>1價僢僩</ja>
  945. /// <en>1 bit</en>
  946. /// </summary>
  947. [EnumValue(Description="Enum.StopBits.ONESTOPBIT")] ONESTOPBIT  =        0,
  948. /// <summary>
  949. /// <ja>1.5價僢僩</ja>
  950. /// <en>1.5 bits</en>
  951. /// </summary>
  952. [EnumValue(Description="Enum.StopBits.ONE5STOPBITS")] ONE5STOPBITS=        1,
  953. /// <summary>
  954. /// <ja>2價僢僩</ja>
  955. /// <en>2 bits</en>
  956. /// </summary>
  957. [EnumValue(Description="Enum.StopBits.TWOSTOPBITS")] TWOSTOPBITS =        2
  958. }
  959. /// <summary>
  960. /// <ja>僔儕傾儖愙懕偺僷儔儊乕僞傪帵偟傑偡丅</ja>
  961. /// <en>Implements the parameters of serial connections.</en>
  962. /// </summary>
  963. [Serializable()]
  964. public class SerialTerminalParam : TerminalParam {
  965. internal int _port;
  966. internal int _baudRate;
  967. internal byte _byteSize;  //7,8偺偳偪傜偐
  968. internal Parity _parity; //Win32僋儔僗撪偺掕悢偺偄偢傟偐
  969. internal StopBits _stopBits; //Win32僋儔僗撪偺掕悢偺偄偢傟偐
  970. internal FlowControl _flowControl;
  971. internal int _transmitDelayPerChar;
  972. internal int _transmitDelayPerLine;
  973. /// <summary>
  974. /// <ja>僨僼僅儖僩愝掕偱弶婜壔偟傑偡丅</ja>
  975. /// <en>Initializes with default values.</en>
  976. /// <seealso cref="Poderosa.Macro.ConnectionList.Open"/>
  977. /// </summary>
  978. /// <remarks>
  979. /// <ja>僷儔儊乕僞偼師偺傛偆偵弶婜壔偝傟傑偡丅</ja>
  980. /// <en>The parameters are set as following:</en>
  981. /// <list type="table">
  982. ///   <item><term><ja>僄儞僐乕僨傿儞僌</ja><en>Encoding</en></term><description><ja>EUC-JP</ja><en>iso-8859-1</en></description></item>丂
  983. ///   <item><term><ja>儘僌</ja><en>Log</en></term><description><ja>庢摼偟側偄</ja><en>None</en></description></item>丂丂丂丂丂丂丂
  984. ///   <item><term><ja>儘乕僇儖僄僐乕</ja><en>Local echo</en></term><description><ja>偟側偄</ja><en>Don't</en></description></item>丂丂
  985. ///   <item><term><ja>憲怣帪夵峴</ja><en>New line</en></term><description>CR</description></item>丂丂丂丂
  986. ///   <item><term><ja>億乕僩</ja><en>Port</en></term><description>COM1</description></item>
  987. ///   <item><term><ja>儃乕儗乕僩</ja><en>Baud Rate</en></term><description>9600</description></item>
  988. ///   <item><term><ja>僨乕僞</ja><en>Data Bits</en></term><description><ja>8價僢僩</ja><en>8 bits</en></description></item>
  989. ///   <item><term><ja>僷儕僥傿</ja><en>Parity</en></term><description><ja>側偟</ja><en>None</en></description></item>
  990. ///   <item><term><ja>僗僩僢僾價僢僩</ja><en>Stop Bits</en></term><description><ja>侾價僢僩</ja><en>1 bit</en></description></item>
  991. ///   <item><term><ja>僼儘乕僐儞僩儘乕儖</ja><en>Flow Control</en></term><description><ja>側偟</ja><en>None</en></description></item>
  992. /// </list>
  993. /// <ja>愙懕傪奐偔偵偼丄<see cref="Poderosa.Macro.ConnectionList.Open"/>儊僜僢僪偺堷悢偲偟偰SerialTerminalParam僆僽僕僃僋僩傪搉偟傑偡丅</ja>
  994. /// <en>To open a new connection, pass the SerialTerminalParam object to the <see cref="Poderosa.Macro.ConnectionList.Open"/> method.</en>
  995. /// </remarks>
  996. public SerialTerminalParam() {
  997. _port = 1;
  998. _baudRate = 9600;
  999. _byteSize = 8;
  1000. _parity = Parity.NOPARITY;
  1001. _stopBits = StopBits.ONESTOPBIT;
  1002. _flowControl = FlowControl.None;
  1003. }
  1004. internal SerialTerminalParam(SerialTerminalParam p) : base(p) {
  1005. _port = p._port;
  1006. _baudRate = p._baudRate;
  1007. _byteSize = p._byteSize;
  1008. _parity = p._parity;
  1009. _stopBits = p._stopBits;
  1010. _flowControl = p._flowControl;
  1011. _transmitDelayPerChar = p._transmitDelayPerChar;
  1012. _transmitDelayPerLine = p._transmitDelayPerLine;
  1013. }
  1014. /// 
  1015. /// 
  1016. /// 
  1017. public override object Clone() {
  1018. return new SerialTerminalParam(this);
  1019. }
  1020. /// 
  1021. /// 
  1022. /// 
  1023. public override bool Equals(object t_) {
  1024. SerialTerminalParam t = t_ as SerialTerminalParam;
  1025. if(t==null) return false;
  1026. return base.Equals(t) && _port==t.Port && _baudRate==t.BaudRate && _byteSize==t.ByteSize && _parity==t.Parity && _stopBits==t.StopBits && _flowControl==t.FlowControl;
  1027. }
  1028. /// 
  1029. /// 
  1030. /// 
  1031. public override int GetHashCode() {
  1032. return base.GetHashCode() + _port.GetHashCode()*2 + _baudRate.GetHashCode()*3 + _byteSize.GetHashCode()*4 + _parity.GetHashCode()*5 + _stopBits.GetHashCode()*6 + _flowControl.GetHashCode()*7;
  1033. }
  1034. #if !MACRODOC
  1035. public override sealed void Export(ConfigNode node) {
  1036. node["type"] = "serial";
  1037. node["port"] = _port.ToString();
  1038. node["baud-rate"] = _baudRate.ToString();
  1039. node["byte-size"] = _byteSize.ToString();
  1040. node["parity"] = EnumDescAttribute.For(typeof(Parity)).GetName(_parity);
  1041. node["stop-bits"] = EnumDescAttribute.For(typeof(StopBits)).GetName(_stopBits);
  1042. node["flow-control"] = EnumDescAttribute.For(typeof(FlowControl)).GetName(_flowControl);
  1043. node["delay-per-char"] =  _transmitDelayPerChar.ToString();
  1044. node["delay-per-line"] = _transmitDelayPerLine.ToString();
  1045. base.Export(node);
  1046. }
  1047. public override sealed void Import(ConfigNode data) {
  1048. _port = GUtil.ParseInt(data["port"], 1);
  1049. _baudRate = GUtil.ParseInt(data["baud-rate"], 9600);
  1050. _byteSize = GUtil.ParseByte(data["byte-size"], 8);
  1051. _parity = (Parity)EnumDescAttribute.For(typeof(Parity)).FromName(data["parity"], Parity.NOPARITY);
  1052. _stopBits = (StopBits)EnumDescAttribute.For(typeof(StopBits)).FromName(data["stop-bits"], StopBits.ONESTOPBIT);
  1053. _flowControl = (FlowControl)EnumDescAttribute.For(typeof(FlowControl)).FromName(data["flow-control"], FlowControl.None);
  1054. _transmitDelayPerChar = GUtil.ParseInt(data["delay-per-char"], 0);
  1055. _transmitDelayPerLine = GUtil.ParseInt(data["delay-per-line"], 0);
  1056. base.Import(data);
  1057. }
  1058. public override string ShortDescription {
  1059. get {
  1060. return "COM"+_port;
  1061. }
  1062. }
  1063. public override string Description {
  1064. get {
  1065. string t = "COM" + _port;
  1066. return t;
  1067. }
  1068. }
  1069. public override string MethodName {
  1070. get {
  1071. return "serial";
  1072. }
  1073. }
  1074. #endif
  1075. /// <summary>
  1076. /// <ja>億乕僩偱偡丅</ja>
  1077. /// <en>Gets or sets the port.</en>
  1078. /// </summary>
  1079. /// <remarks>
  1080. /// <ja>侾側傜COM1丄10側傜COM10偵側傝傑偡丅</ja>
  1081. /// <en>1 means COM1, and 10 means COM10.</en>
  1082. /// </remarks>
  1083. public int Port {
  1084. get {
  1085. return _port;
  1086. }
  1087. set {
  1088. _port = value;
  1089. }
  1090. }
  1091. /// <summary>
  1092. /// <ja>儃乕儗乕僩偱偡丅</ja>
  1093. /// <en>Gets or sets the baud rate.</en>
  1094. /// </summary>
  1095. public int BaudRate {
  1096. get {
  1097. return _baudRate;
  1098. }
  1099. set {
  1100. _baudRate = value;
  1101. }
  1102. }
  1103. /// <summary>
  1104. /// <ja>僨乕僞偺價僢僩悢偱偡丅</ja>
  1105. /// <en>Gets or sets the bit count of the data.</en>
  1106. /// </summary>
  1107. /// <remarks>
  1108. /// <ja>俈偐俉偱側偄偲偄偗傑偣傫丅</ja>
  1109. /// <en>The value must be 7 or 8.</en>
  1110. /// </remarks>
  1111. public byte ByteSize {
  1112. get {
  1113. return _byteSize;
  1114. }
  1115. set {
  1116. _byteSize = value;
  1117. }
  1118. }
  1119. /// <summary>
  1120. /// <ja>僷儕僥傿偱偡丅</ja>
  1121. /// <en>Gets or sets the parity.</en>
  1122. /// </summary>
  1123. public Parity Parity {
  1124. get {
  1125. return _parity;
  1126. }
  1127. set {
  1128. _parity = value;
  1129. }
  1130. }
  1131. /// <summary>
  1132. /// <ja>僗僩僢僾價僢僩偱偡丅</ja>
  1133. /// <en>Gets or sets the stop bit.</en>
  1134. /// </summary>
  1135. public StopBits StopBits {
  1136. get {
  1137. return _stopBits;
  1138. }
  1139. set {
  1140. _stopBits = value;
  1141. }
  1142. }
  1143. /// <summary>
  1144. /// <ja>僼儘乕僐儞僩儘乕儖偱偡丅</ja>
  1145. /// <en>Gets or sets the flow control.</en>
  1146. /// </summary>
  1147. public FlowControl FlowControl {
  1148. get {
  1149. return _flowControl;
  1150. }
  1151. set {
  1152. _flowControl = value;
  1153. }
  1154. }
  1155. /// <summary>
  1156. /// <ja>暥帤偁偨傝偺僨傿儗僀(儈儕昩扨埵)偱偡丅</ja>
  1157. /// <en>Gets or sets the delay time per a character in milliseconds.</en>
  1158. /// </summary>
  1159. public int TransmitDelayPerChar {
  1160. get {
  1161. return _transmitDelayPerChar;
  1162. }
  1163. set {
  1164. #if !MACRODOC
  1165. if(value<0) throw new ArgumentException(GEnv.Strings.GetString("Message.SerialPTerminalParam.TransmitDelayRange"));
  1166. _transmitDelayPerChar = value;
  1167. #endif
  1168. }
  1169. }
  1170. /// <summary>
  1171. /// <ja>峴偁偨傝偺僨傿儗僀(儈儕昩扨埵)偱偡丅</ja>
  1172. /// <en>Gets or sets the delay time per a line in milliseconds.</en>
  1173. /// </summary>
  1174. public int TransmitDelayPerLine {
  1175. get {
  1176. return _transmitDelayPerLine;
  1177. }
  1178. set {
  1179. #if !MACRODOC
  1180. if(value<0) throw new ArgumentException(GEnv.Strings.GetString("Message.SerialPTerminalParam.TransmitDelayRange"));
  1181. _transmitDelayPerLine = value;
  1182. #endif
  1183. }
  1184. }
  1185. }
  1186. /// <summary>
  1187. /// <ja>Cygwin傑偨偼Services for Unix偵愙懕偡傞偨傔偺TerminalParam偱偡丅</ja>
  1188. /// <en>Implements the parameters to connect a cygwin shell or a Services for Unix shell.</en>
  1189. /// </summary>
  1190. public abstract class LocalShellTerminalParam : TerminalParam {
  1191. protected string _home;
  1192. protected string _shell;
  1193. /// <summary>
  1194. /// <ja>昗弨揑側抣偱弶婜壔偟傑偡丅</ja>
  1195. /// <en>Initializes with default values.</en>
  1196. /// </summary>
  1197. public LocalShellTerminalParam() {
  1198. #if !MACRODOC
  1199. _terminalType = TerminalType.VT100;
  1200. _transmitnl = NewLine.CR;
  1201. _encoding = LocalShellUtil.DefaultEncoding;
  1202. #endif
  1203. }
  1204. internal LocalShellTerminalParam(LocalShellTerminalParam p) : base(p) {
  1205. _home = p._home;
  1206. _shell = p._shell;
  1207. }
  1208. /// <summary>
  1209. /// <ja>Cygwin忋偺僔僃儖偵偮側偄偩偲偒偺HOME娐嫬曄悢偺抣偱偡丅僨僼僅儖僩抣偼 <c>/home/(Windows偺傾僇僂儞僩柤)</c> 偱偡丅</ja>
  1210. /// <en>Gets or sets the initial value of the HOME environment variable. The default value is <c>/home/(account name on Windows)</c>.</en>
  1211. /// </summary>
  1212. public string Home {
  1213. get {
  1214. return _home;
  1215. }
  1216. set {
  1217. _home = value;
  1218. }
  1219. }
  1220. /// <summary>
  1221. /// <ja>婲摦偡傞Cygwin偺僔僃儖傊偺僷僗偱偡丅僨僼僅儖僩抣偼 <c>/bin/bash</c> 偱偡丅</ja>
  1222. /// <en>Gets or sets the path of the shell. The defualt value is <c>/bin/bash</c>.</en>
  1223. /// </summary>
  1224. public string Shell {
  1225. get {
  1226. return _shell;
  1227. }
  1228. set {
  1229. _shell = value;
  1230. }
  1231. }
  1232. #if !MACRODOC
  1233. public override void Import(ConfigNode data) {
  1234. _home = data["home"];
  1235. _shell = data["shell"];
  1236. base.Import(data);
  1237. }
  1238. public override string ShortDescription {
  1239. get {
  1240. int n = _shell.IndexOf(' ');
  1241. return n==-1? _shell : _shell.Substring(0, n);
  1242. }
  1243. }
  1244. #endif
  1245. }
  1246. /// <summary>
  1247. /// <ja>Cygwin偵愙懕偡傞偨傔偺TerminalParam偱偡丅</ja>
  1248. /// <en>Implements the parameters to connect a cygwin shell.</en>
  1249. /// </summary>
  1250. public class CygwinTerminalParam : LocalShellTerminalParam {
  1251. public CygwinTerminalParam() {
  1252. #if !MACRODOC
  1253. _home   = CygwinUtil.DefaultHome;
  1254. _shell  = CygwinUtil.DefaultShell;
  1255. #endif
  1256. }
  1257. public override object Clone() {
  1258. CygwinTerminalParam p = new CygwinTerminalParam();
  1259. p.Home = _home;
  1260. p.Shell = _shell;
  1261. return p;
  1262. }
  1263. public override bool Equals(object t_) {
  1264. CygwinTerminalParam t = t_ as CygwinTerminalParam;
  1265. if(t==null) return false;
  1266. return base.Equals(t) && _home==t._home && _shell==t._shell;
  1267. }
  1268. public override int GetHashCode() {
  1269. return base.GetHashCode() + _home.GetHashCode()*3 + _shell.GetHashCode()*7;
  1270. }
  1271. #if !MACRODOC
  1272. public override sealed void Export(ConfigNode node) {
  1273. node["type"] = "cygwin";
  1274. node["home"] = _home;
  1275. node["shell"] = _shell;
  1276. base.Export(node);
  1277. }
  1278. public  override string Description {
  1279. get {
  1280. return ShortDescription + "(cygwin)";
  1281. }
  1282. }
  1283. public override string MethodName {
  1284. get {
  1285. return "cygwin";
  1286. }
  1287. }
  1288. #endif
  1289. }
  1290. /// <summary>
  1291. /// <ja>Services for Unix偵愙懕偡傞偨傔偺TerminalParam偱偡丅</ja>
  1292. /// <en>Implements the parameters to connect a shell of Servies for Unix.</en>
  1293. /// </summary>
  1294. public class SFUTerminalParam : LocalShellTerminalParam {
  1295. public SFUTerminalParam() {
  1296. #if !MACRODOC
  1297. _home   = SFUUtil.DefaultHome;
  1298. _shell  = SFUUtil.DefaultShell;
  1299. #endif
  1300. }
  1301. public override object Clone() {
  1302. SFUTerminalParam p = new SFUTerminalParam();
  1303. p.Home = _home;
  1304. p.Shell = _shell;
  1305. return p;
  1306. }
  1307. public override bool Equals(object t_) {
  1308. SFUTerminalParam t = t_ as SFUTerminalParam;
  1309. if(t==null) return false;
  1310. return base.Equals(t) && _home==t._home && _shell==t._shell;
  1311. }
  1312. public override int GetHashCode() {
  1313. return base.GetHashCode() + _home.GetHashCode()*3 + _shell.GetHashCode()*7;
  1314. }
  1315. #if !MACRODOC
  1316. public override sealed void Export(ConfigNode node) {
  1317. node["type"] = "sfu";
  1318. node["home"] = _home;
  1319. node["shell"] = _shell;
  1320. base.Export(node);
  1321. }
  1322. public  override string Description {
  1323. get {
  1324. return ShortDescription + "(SFU)";
  1325. }
  1326. }
  1327. public override string MethodName {
  1328. get {
  1329. return "SFU";
  1330. }
  1331. }
  1332. #endif
  1333. }
  1334. }