DT-900 PPP ライブラリ解説書 DT-900 PPP ライブラリ解説書 Rev.1.
DT-900 PPP ライブラリ解説書 本仕様書に記載されている会社名、製品名は、それぞれ各社の商標または登録商標 です。 ■お願い ・本仕様書の内容については、万全を期して作成しましたが、万一ご不審な点や お気づきのことがございましたら、当社までご連絡ください。 ・本仕様書の一部または全部を無断で複製することは禁止されています。 個人としてご利用になるほかは、著作権法上、当社に無断では使用できません ので、ご注意ください。 本仕様書の内容は、改良のため予告なく変更することがあります。 Copyright (C) 2003 CASIO COMPUTER CO.,LTD. All rights reserved.
DT-900 PPP ライブラリ解説書 目次 1. はじめに ...............................................................................................................................................4 2. ソフトウェア構成 ....................................................................................................................................4 2. 1. ドライバ部 ........................................................................................................................................4 2. 2. プロトコル部 ...................
DT-900 PPP ライブラリ解説書 1. はじめに PPP ライブラリは CASIO DT-900 とサテライト IOBOX 経由でモデムを接続して TCP/IP 通信を実現させ るための製品です。 DT-900 と IOBOX は IrDA を使用し通信を行います。 PPP ライブラリはプロトコル部、ドライバ部、共にまとめてライブラリ形式になり、アプリケーションとリンクして 使用します。 プロトコル部は US Software Inc.の USNET(日本代理店は株式会社エーアイコーポレーション)です。 2. ソフトウェア構成 アプリケーション TCP/IP USNET_DT ドライバ ライブラリ 2. 1.ドライバ部 RS-232C 接続モデムドライバ IrDA を使用した RS-232C シリアル接続用モデムのドライバです。 2. 2.プロトコル部 USNET Ver. 2.55 のプロトコル階層を使用します。 2. 3. OS、パッチと PPP ライブラリの各バージョンの組合せによる動作 OS PATCH 1.09 以前 1.02 2.00 以降 1.09 以前 2.00 2.
DT-900 PPP ライブラリ解説書 3.
DT-900 PPP ライブラリ解説書 4. アプリケーション作成方法 ソースコード作成 必要に応じて以下のファイルをインクルードします。 #include "net.h" 必須 #include "local.h" 必須 #include "support.h" 必須 #include "socket.h" socket 使用時 #include "icmp.
DT-900 PPP ライブラリ解説書 5. 環境ファイル 環境ファイルは A:¥USNET_DT.CFG です。Ninit 関数実行時に参照されます。 5. 1.
DT-900 PPP ライブラリ解説書 シリアルボーレート(9600、19200、38400、115200bps) 必須項目です。 IrDA の速度は IOBOX のディップスイッチ設定に従います。 (38400、115200bps) IOBOX接続待ち時間(1∼3600秒) IOBOXとのデータリンク確立が完了するまでの時間です。 デフォルトは30秒です。 5. 2.ファイルレイアウト ※ TEL:03-5484-7066 TEL:03-5484-7067 # 電話番号(第 1) AUT:2 USR:USERNAME PAS:”PASSWORD” IPA:192.168.0.1 SNM:255.255.255.0 DNS:192.168.0.
DT-900 PPP ライブラリ解説書 SNM: DNS: SAI:ATE1V1 SAD:ATD SSP:0 TIM:30 # サブネットマスク # ドメインネームサーバ IP アドレス # 初期化 AT コマンド # ダイヤル AT コマンド # ボーレート(0:9600 1:19200 2:38400 3:115200) # IOBOX接続待ち時間(1∼3600 秒) 例 2.
DT-900 PPP ライブラリ解説書 6. 動作環境 IOBOX のディップスイッチは下記の設定にしてください。 6. 1.IR 速度 (38.4、115.2Kbps のいずれかを選択してください) SW1 SW2 OFF OFF 38.4Kbps ON OFF 115.2Kbps OFF ON 230.04Kbps ON ON 禁止 6. 2.動作モード (アクティブを選択してください) SW3 SW4 OFF OFF アクティブ ON OFF パッシブ OFF ON スルー ON ON 禁止 6. 3.終端設定 (終端を選択してください) SW5 SW5 OFF 非終端 ON 終端 6. 4.232C 速度 (2400、4800、9600bps、19.2、38.4、57.6、115.
DT-900 PPP ライブラリ解説書 7. 使用上の注意 通信中に HT を取り外したり、HT の電源を切った場合、IrDA は切断されますが、IOBOX の ER 信号が ON のままになってしまうため、モデムが切断されません.
DT-900 PPP ライブラリ解説書 8. PPP ライブラリ関数一覧 8. 1.電源 ON/OFF 発生時の処理 Portinit から Portterm(Nterm)までの間で電源 ON/OFF が発生した場合、電源 ON 後 PPP ライブラリ 関数で“電源 ON/OFF あり(-20)”をリターンします。 この場合、Nterm を実行後 Ninit から処理を始める必要があります。 8. 2.回線切断発生時の処理 回線接続中に回線切断が発生した場合、発生後の PPP ライブラリ関数で“DisConnect(-21)”をリターン します。 この場合、Nterm を実行後 Ninit から処理を始める必要があります。 モデムとのシリアルインターフェイスは 9wire の結線タイプを使用します。 送受信時に CD 信号のチェックを行い、OFF の場合は回線断とみなしアプリケーションに通知します。 これによりモデムの電源 OFF およびケーブル切断を検知します。 また、IrDA 関数からディスコネクトエラーが返った場合には、IOBOX との回線断とみなしアプリケーション に通知します。 8. 3.
DT-900 PPP ライブラリ解説書 8. 5.
DT-900 PPP ライブラリ解説書 8. 6.
DT-900 PPP ライブラリ解説書 int Ninit(void) テーブルとバッファの初期化を行います。Ninit()は、最初にコールする必要があります。 引数 無し 戻り値 0 : -1 : 正常終了。 環境ファイルの記述が間違っています。 [Ninit 例] main() { ... if (Ninit() < 0) ...
DT-900 PPP ライブラリ解説書 int Nterm(void) Ninit に対応するシャットダウン関数です。 引数 無し 戻り値 0 : 正常終了 [Nterm 例] Nterm(); アプリケーション終了時は必ずコールしてください。 - 16 -
DT-900 PPP ライブラリ解説書 int Portinit(char *port) 通信ポートの初期化処理です。 引数 戻り値 char *port : "*" 0 : 必ず"*"を指定してください。 初期化成功 -11 : パラメータエラー。 -13 : ハードウェアのエラーが発生、又は通信ポートが使えません。 -20 : 電源 ON/OFF あり。 -22 : ユーザーブレイク。 [Portinit 例] main() { ... if (Ninit() < 0) ...<< process error >> if (Portinit("*") < 0) ...<< process error >> ...
DT-900 PPP ライブラリ解説書 int Portterm(char *port) 通信ポートの終了をおこないます。 引数 戻り値 char *port : "*" 0 : 必ず"*"を指定してください。 正常終了 [Portterm 例] Portterm(“*”); - 18 -
DT-900 PPP ライブラリ解説書 int Nopen(char *to, char *portoc, int p1, int p2, int flags) コネクションをオープンする関数です。 引数 char *to : "n1.n2.n3.
DT-900 PPP ライブラリ解説書 host1 から”192.168.1.1”の TCP ポート 1000 にオープン要求を出す能動的オープンです。 ローカルポート番号は、Nportno ファンクションを使って、動的に割り当てられます。 host1: int conno, myport; /* connection number */ ... myport = Nportno(); conno = Nopen("192.168.1.1", "TCP/IP", myport, 1000, 0); if (conno < 0) ...<< process error >> [Nopen 例 2] TCP ポート番号 1000 でコールを待つ、受動的オープンです。 host2: int conno; /* connection number */ conno = Nopen("*", "TCP/IP", 1000, 0, 0); [Nopen 例 3] ICMP のオープンです。 host1: conno = Nopen("192.168.1.
DT-900 PPP ライブラリ解説書 一般的に、受動的オープンはサーバアプリケーション、能動的オープンはクライアントアプリケーションで 使用します。 - 21 -
DT-900 PPP ライブラリ解説書 int Nclose(int conno) コネクションナンバー"conno"をクローズします。このファンクションは、コネクションテーブルがクリアされる まで待ちます。 引数 int conno : 戻り値 0 : -14 : コネクションナンバー 成功 プロトコル関連の問題が発生しました。リモートホストにデータを書き込んでい た場合は、データは、安全な状態でないと思わなければなりません。コネクシ ョンはクローズされます。 -16 : コネクションナンバーが間違っている可能性があります。クローズは行われま せん。 -20 : 電源 ON/OFF あり。 -21 : 回線切断。 -22 : ユーザーブレイク。 -23 : 内部エラー発生。 [Nclose 例] int conno; /* connection number */ error = Nclose(conno); /* close connection */ if (error < 0) << process error >> アプリケーションはクローズを再試行してはいけませ
DT-900 PPP ライブラリ解説書 int Nread(int conno, char *buff, int len) コネクション"conno"から最長"len"サイズのメッセージを"buff"に読み込みます。 引数 戻り値 int conno : コネクションナンバー。 char *buff : メッセージ格納バッファへのポインタ。 int len : メッセージ長。 0 を含む正の数 : リターンされた文字数。 -12 : タイムアウト。読み出しを再び試みます。 -14 : プロトコル関連の問題。アプリケーションは、コネクションをクローズす る必要があります。 -16 : コネクションナンバーが無効です。 -18 : ノンブロッキングコネクションを処理することが出来ません。読み出し は、再び試されています。 -19 : メッセージが長すぎて、バッファに格納出来ません。 -20 : 電源 ON/OFF あり。 -21 : 回線切断 -22 : ユーザーブレイク。 -23 : 内部エラー発生。 Nread マクロ read マクロを使った場合、以
DT-900 PPP ライブラリ解説書 [Nread 例] /* user defined input buffer size */ #define MAX_BUFFER_SIZE 80 ... int error; /* error code */ int conno; /* connection number */ char buff[MAX_BUFFER_SIZE]; /* data input buffer */ ...
DT-900 PPP ライブラリ解説書 int Nwrite(int conno, char *buff, int len) "buff"にあるサイズ"len"バイトのメッセージを、コネクション"conno"に書き込みます。 引数 戻り値 int conno : コネクションナンバー。 char *buff : 書き込み先のバッファのポインタ。 int len : メッセージ長。(最大長は SOCKET_MAXDAT 参照) 正の数 : 正常終了 -12 : タイムアウト。ブロッキングモードの TCP の場合、もう一方のポートが肯定応答 を正しく送信しなかった可能性があります。又、システムに大量のロードが行 われた為に、肯定応答を受け取る前に、タイムアウトになった可能性がありま す。コネクションをクローズする必要があります。ノンブロッキングモードの場合 は、書き込みが再度試されます。 -14 : プロトコル関連の問題。アプリケーションはコネクションをクローズする必要が あります。 -16 : コネクションナンバーが無効です。 -19 : メッセージが長すぎて、バッファに格納
DT-900 PPP ライブラリ解説書 if (error < 0) << process error >> - 26 -
DT-900 PPP ライブラリ解説書 unsigned short Nportno(void) ポート番号取得 引数 無し 戻り値 ポート番号 - 27 -
DT-900 PPP ライブラリ解説書 int accept(int s, struct sockaddr *name, int *namelen) accept は、能動オープンの要求を待ち、新しいソケット番号をリターンします。オリジナルのソケットは、ど のような場合も変化しません。 引数 戻り値 int s : ソケット番号。 struct sockaddr *name : name 構造体へのポインタ。 int *namelen : name 構造体のサイズへのポインタ。 正の数 : ソケット番号。 -1 : 失敗。 -20 : 電源 ON/OFF あり。 -21 : 回線切断 -22 : ユーザーブレイク。 -23 : 内部エラー発生。 - 28 -
DT-900 PPP ライブラリ解説書 int bind(int s, struct sockaddr *name, int namelen) ソケットは、socket コールで作成されています。bind を、能動的オープン(connect)の前に使うことは出来 ますが、その必要性はありません。ただし、accept の前には必要です。 引数 戻り値 int s : ソケット番号。 struct sockaddr *name : name 構造体へのポインタ。 int namelen : name 構造体のサイズ。 0 : 成功 -1 : 失敗 -20 : 電源 ON/OFF あり。 -21 : 回線切断 -22 : ユーザーブレイク。 -23 : 内部エラー発生。 - 29 -
DT-900 PPP ライブラリ解説書 int closesocket(int s) ソケットをクローズします。 closesocket は、UNIX の場合は、close です。ファイルの opne/close と区別するため closesocket にな っています。 引数 int s : ソケット番号 戻り値 0 : 成功 -1 : 失敗 -20 : 電源 ON/OFF あり。 -21 : 回線切断 -22 : ユーザーブレイク。 -23 : 内部エラー発生。 - 30 -
DT-900 PPP ライブラリ解説書 int connect(int s,struct sockaddr *name,int namelen) 能動的に接続します。 ソケットは、socket コール時に作成されています。name 構造体は、ポート番号および Internet アドレスを 指定するのに使われます。 引数 戻り値 int s : ソケット番号 struct sockaddr *name : name 構造体へのポインタ int namelen : name 構造体のサイズ 0 : 成功 -1 : 失敗 -20 : 電源 ON/OFF あり。 -21 : 回線切断 -22 : ユーザーブレイク。 -23 : 内部エラー発生。 struct sockaddr { /* generic socket address */ unsigned short sa_family; /* address family */ char sa_data[14];/* up to 14 bytes of direct address */ }; - 31 -
DT-900 PPP ライブラリ解説書 int fcntlsocket(int s, int cmd, int arg) ソケットのノンブロッキング属性を取得、設定します。 引数 int s : ソケット番号 int cmd : ネットワークコマンド int arg : 戻り値 F_GETFL フラグを取得します。 F_SETFL フラグを設定します。 パラメータ( F_SETFL のとき有功) O_NDELAY ノンブロッキング 0 非ノンブロッキング SETFL 0 : 成功 GETFL フラグの現在の値 : 成功 -1 : 失敗 -20 : 電源 ON/OFF あり。 -21 : 回線切断。 - 32 -
DT-900 PPP ライブラリ解説書 struct hostent *gethostbyname(char *name) 名前から IP アドレスを取得します。 このルーチンで使われる名前は"ホスト名"です。 引数 char *name : ホスト名へのポインタ 戻り値 構造体のアドレス : 成功 0 : 失敗 -20 : 電源 ON/OFF あり。 -21: 回線切断 -22 : ユーザーブレイク。 -23 : 内部エラー発生。 回線接続中に使用できます。 ホストの IP アドレスは、構造体"hostent"に入れられます。 ホストの IP アドレスを、構造体"hostent"から取得する場合のコード例として、以下のコードがあります。 memcpy((char *)&socksav.
DT-900 PPP ライブラリ解説書 int getpeername(int s, struct sockaddr *name, int *namelen) 通信先のホストの情報を取得します。 リモートアドレスを構造体"name"(リモート Internet アドレスおよびポート番号)に設定します。 受信処理終了後にコールしてください。 引数 戻り値 int s : ソケット番号 struct sockaddr *name : name 構造体へのポインタ int *namelen : name 構造体のサイズ 0 : 成功 -1 : 失敗 -20 : 電源 ON/OFF あり。 -21 : 回線切断。 - 34 -
DT-900 PPP ライブラリ解説書 int getsockname(int s, struct sockaddr *name, int *namelen) 自ホストの情報を取得します。 ローカル Internet アドレスおよびポート番号を構造体"name"に設定します。 引数 戻り値 int s : ソケット番号 struct sockaddr *name : name 構造体へのポインタ int *namelen : name 構造体のサイズへのポインタ。 0 : 成功 -1 : 失敗 -20 : 電源 ON/OFF あり。 -21 : 回線切断。 - 35 -
DT-900 PPP ライブラリ解説書 int setsockopt(int s, int level, int optname, char *optval, int optlen) int getsockopt(int s, int level, int optname, char *optval, int *optlen) ソケットオプションをセットします。 ソケットオプションを操作するルーチン レベル IPPROTO_IP IP_OPTIONS IP_OPTIONS 意味 IP ヘッダのオプション IPPROTO_TCP TCP_NODELAY 送信を遅らせない SOL_SOCKET SO_BROADCAST ブロードキャストを許可 SO_DEBUG デバッグフラグ SO_DONTROUTE ルーティング抜き SO_KEEPALIVE ブローブのキープアライブ SO_LINGER クローズを延ばす SO_OOBINLINE URG データをインラインのまま残す SO_RCVBUF バッファサイズを獲得する SO_SNDBUF バッファサイズを送信する SO
DT-900 PPP ライブラリ解説書 int setsockopt(int s, int level, int optname, char *optval, int optlen) ソケットオプションを設定します。 詳細は BSD ソケットライブラリの文献を参照してください。 引数 戻り値 int s : ソケット番号 int level : レベル int optname : IP_OPTIONS char *optval : オプション int optlen : オプション 0 : -1 : 正常終了 エラー(errno にそのエラーを示す以下の値が設定されます。) EBADF(-16) s が有効な記述子ではありません。 EFAULT(-17) optval が指すアドレスは、プロセス・アドレス空間の有効 部分にありません。(パラメータエラー) ENOPROTOOPT(-53) オプションは指定されたレベルでは認識されていませ ん。 -20 : 電源 ON/OFF あり。 -21 : 回線切断。 int getsockopt(int s, int level
DT-900 PPP ライブラリ解説書 int ioctlsocket(int s, int request,...
DT-900 PPP ライブラリ解説書 int listen(int s, int backlog) 受動オープンが行われる事を指定します。 引数 int s : ソケット番号 int backlog : 受動オープン待ちの最大コネクション数 (実装では最大ソケット数:8 で固定されています) 戻り値 0 : -1 : 正常終了 エラー(errno にそのエラーを示す以下の値が設定されます。) EBADF(-16) s が有効な記述子ではありません。 -20 : 電源 ON/OFF あり。 -21 : 回線切断。 -22 : ユーザーブレイク。 -23 : 内部エラー発生。 - 39 -
DT-900 PPP ライブラリ解説書 int recv(int s, char *buf, int len, int flags) int recvfrom(int s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen) int recvmsg(int s, struct msghdr *msg, int flags) int readsocket(int s, char *buf, int len) ソケットからメッセージを受け取る BSD ルーチンです。 recv は、コネクション型で使われ、残りの二つはコネクションレス型でも使用する事が出来ます。 recvmsg は、UDP 用の関数です。 引数 int s : ソケット番号 char *buf : バッファへのポインタ int len : バッファサイズ int flags : フラグ MSG_OOB ソケット上にある「帯域外」のデータの受信をしま す。 MSG_PEEK データを取りますが、再読み出しができるように、 データをそのまま残します
DT-900 PPP ライブラリ解説書 int iov_len; /* size */ }; マクロ #define readsocket(s, buf, len) recv(s, buf, len, 0); - 41 -
DT-900 PPP ライブラリ解説書 int selectsocket(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceprfds, struct timeval *timeout) ソケットの状態をチェックします。 引数 int nfds : 対象となるソケット番号 fd_set *readfds : データを獲得するソケットへのポインタ fd_set *writefds : データを送信するソケットへのポインタ fd_set *exceprfds : 緊急データを獲得するソケットへのポインタ struct timeval *timeout : タイムアウト値へのポインタ ゼロポインタは、無制限のタイムアウトを意味します。 戻り値 正の数 : -1 : 0 : 準備出来ているソケット数 エラー タイムアウト -20 : 電源 ON/OFF あり。 -21 : 回線切断。 -22 : ユーザーブレイク。 -23 : 内部エラー発生。 struct timeval{ /* time-out for
DT-900 PPP ライブラリ解説書 int send(int s, char *buf, int len, int flags) int sendto(int s, char *buf, int len, int flags, struct sockaddr *to, int tolen) int sendmsg(int s, struct msghdr *msg, int flags) int writesocket(int s, char *buf, int len) ソケットにメッセージを送る BSD ルーチンです。 send は、コネクション型で使われ、残りの二つは、コネクションレス型でも使用することが出来ます。 sendmsg は、UDP 用の関数です。 引数 int s : ソケット番号 char *buf : データバッファへのポインタ int len : データバッファのサイズ int flags : フラグ MSG_OOB MSG_DONTROUTE 戻り値 「帯域外」のデータを送信します。 ルーティング抜きで送信します。 struct sockaddr *to
DT-900 PPP ライブラリ解説書 int shutdown(int s, int how) ソケットのシャットダウンします。 引数 int s : ソケット番号 int how : 0 受信をシャットダウンします。 1 送信をシャットダウンします。TCP の場合は、FIN を送ります。 2 受信、送信の両方をシャットダウンします。 戻り値 0 : 成功 -1 : 失敗 -20 : 電源 ON/OFF あり。 -21 : 回線切断 -22 : ユーザーブレイク。 -23 : 内部エラー発生。 - 44 -
DT-900 PPP ライブラリ解説書 void sleepsocket(int sec) 秒単位のディレイです。 引数 int sec : 戻り値 無し ディレイする秒(0 も可 : キー入力待ち等に使用します。) Portinit を実行後、Portterm を実行するまでの間でディレイをおきたい場合、必ず sleepsocket を使用 してください。ソフトウェアループ、キー入力待ち等を行うと、TCP/IP の受信処理が動作できずに接続 NG と なる場合があります。 - 45 -
DT-900 PPP ライブラリ解説書 int socket(int domain, int type, int protocol) ソケットを作成します。socket ルーチンでは、実際のネットワーク操作は行われません。 引数 int domain : PF_INET TCP/IP および関連プロトコル。 int type : SOCK_STREAM ストリームソケット=TCP/IP SOCK_DGRAM データグラムソケット=UDP/IP SOCK_RAW 下層のプロトコルインターフェース = リ ンクレイヤ int protocol : 戻り値 0 固定 正の数 : ソケット番号 -1 : 失敗 -20 : 電源 ON/OFF あり。 -21 : 回線切断。 - 46 -
DT-900 PPP ライブラリ解説書 int FTPget(char *host, char *file, int mode) FTP プロトコルでファイルを受信します。 引数 char *host : サーバホスト名。"192.168.1.
DT-900 PPP ライブラリ解説書 int FTPput(char *host, char *file, int mode) FTP プロトコルでファイルを送信します。 引数 char *host : サーバホスト名。"192.168.1.