Hitachi

JP1 Version 12 JP1/File Transmission Server/FTP(Windows(R)用)


ライブラリの使用方法

JP1/FTP APIライブラリは,JP1/FTPのファイル伝送機能をユーザプログラムから利用するときに使用します。

JP1/FTP APIライブラリを使用して,次のことができます。

〈このページの構成〉

関数を使用するための前提条件

JP1/FTPが提供する関数を使用するために必要なものを次に示します。

ユーザプログラムで使用できる言語を次に示します。

JP1/FTP APIライブラリが前提とするコンパイラーを次に示します。

表7‒1 JP1/FTP APIライブラリが前提とするコンパイラー

コンパイラー

種別

ヘッダファイル

インポートライブラリ

Visual Studio 2012

32ビット用

apihead.h

FTSFTP110.lib

64ビット用

apihead.h

FTSFTP110_x64.lib

Visual Studio 2013

32ビット用

apihead.h

FTSFTP120.lib

64ビット用

apihead.h

FTSFTP120_x64.lib

ヘッダファイルおよびインポートライブラリの格納先は,「付録A ファイルおよびディレクトリ一覧」を参照してください。なお,ヘッダファイルとインポートライブラリをJP1/FTPがインストールされていない環境にコピーしてユーザプログラムを作成することは可能です。また,Visual Studio自体をインストールできるOSは,Visual Studioの仕様に依存します。

環境設定

SERVICESの設定

JP1/FTP Clientのサービス名「ftsc」を設定します。詳しくは,「2.2.3 ポート番号を設定する」を参照してください。

HOSTSの設定

クライアント側のJP1/FTPが動作しているホストのホスト名とIPアドレスを設定します。このホスト名は接続情報構造体,伝送情報構造体で指定します。

OSのインストールディレクトリ\system32\drivers\etc\HOSTSに次の1行を追加してください。

xxx.xxx.xxx.xxx      yyyyyy
(凡例)

xxx.xxx.xxx.xxx:IPアドレス

yyyyyy:ホスト名

コーディング

JP1/FTPとのコネクション確立情報の指定

JP1/FTP Clientサービスとのコネクション確立は,fts_ftp_open_ex()の引数に接続情報構造体のアドレスを設定します。

  • 接続情報構造体

typedef struct _FTS_FTP_API_CONN_DATA {
    char hostname[256+1];           /* ホスト名 (クライアント) */
    int priority;                   /* 優先IPバージョン */
    char reserve[1784];             /* 予約領域 */
} FTS_FTP_API_CONN_DATA;
  • 接続情報構造体メンバの内容

    • hostname:JP1/FTP Clientサービスが動作しているホストのホスト名またはIPアドレスを指定します。IPアドレスの場合,IPv4またはIPv6アドレスを指定できます。NULLを指定した場合は,自ホスト名(OSのhostnameコマンドが返すホスト名:物理ホスト)が仮定されます。

      FTPクライアントでの自IPアドレスの指定を有効にした場合,この引数での指定がFTPクライアントの自IPアドレスになります。

      NULLを指定した場合は,FTPクライアントの物理ホストが仮定されます。

      FTPクライアントでの自IPアドレスの指定を無効にした場合,FTPクライアントの自IPアドレスは,OSが自動的に割り当てるアドレスになります。FTPクライアントでの自IPアドレスの指定を有効にする定義については,「3.11 複数IPアドレス環境での使用を参照してください。

    • priority:優先するインターネットプロトコルバージョンを指定します。

      FTS_AF_INET:IPv4を優先します。

      FTS_AF_INET6:IPv6を優先します。

      上記以外の場合,FTS_AF_INETを仮定します。

    • reserve:予約領域です。「\0」で初期化してください。

    注意事項

    char型の変数値の最後は,「\0」にしてください。

伝送情報の指定

ファイル伝送要求の登録は,fts_ftp_syn_request_ex(),fts_ftp_asyn_request_ex()の引数に登録済みの伝送カード名や伝送情報構造体のアドレスを設定します。

  • カード名称による伝送要求の登録

    [伝送の登録/実行]で登録した伝送カード名を指定することで,伝送要求を登録できます。

  • 伝送情報構造体による伝送情報の指定

    伝送に必要な情報を指定することで,伝送要求を登録できます。

  • 伝送情報構造体

typedef struct _FTS_FTP_API_DATA_EX {
    char cardname[20+1];            /* カード名称 */
    char host[256+1];               /* 相手ホスト名 */
    unsigned int portnum;           /* ポート番号 */
    char username[50+1];            /* 相手ユーザ名 */
    char password[50+1];            /* パスワード */
    int type;                       /* 伝送モード */
    int mode;                       /* 圧縮モード */
    int cmd;                        /* 送受信種別 */
    char quote[300+1];              /* FTPコマンド */
    char localname[260+1];          /* ローカルファイル名 */
    char remotename[260+1];         /* リモートファイル名 */
    char end_program[260+1];        /* 正常時起動プログラム名 */
    char abend_program[260+1];      /* 異常時起動プログラム名 */
    char comment[80+1];             /* コメント */
    int fsize;                      /* サイズ確認 */
    int ftps;                       /* FTPS使用 */
    int scertval;                   /* サーバ証明書有効期限確認 */
    char cacertpath[260+1];         /* CA証明書パス名 */
    char crlpath[260+1];            /* CRLパス名 */
    char reserve[708];              /* 予約領域 */
} FTS_FTP_API_DATA_EX;
  • 伝送情報構造体メンバの内容

    • cardname:カード名称を指定します。

    • host:FTPのホスト名を指定します。ftp>open aaaa

    • portnum:FTPのポート番号を指定します。ftp>open aaaa bbbb

    • username:ログイン名を指定します。ftp>user aaaa

    • password:パスワードを指定します。

    • type:伝送モードを指定します。

      FTS_TYPE_A:データをASCIIコードと解釈し,送信します。ftp>ascii

      FTS_TYPE_I:データをイメージと解釈し,送信します。ftp>binary

    • mode:圧縮伝送を指定します。

       FTS_MODE_S:圧縮伝送をしません。

       FTS_MODE_C:圧縮伝送をします。

    • cmd:伝送の種類を指定します。

      単/複伝送をORで指定することで,単一ファイル伝送または複数ファイル伝送を組み合わせて指定できます。

      ただし,この指定は受信の場合だけ有効です。

      伝送の種類

       FTS_CMD_SEND:送信します。ftp>put aaaa bbbb

       FTS_CMD_RECV:受信します。ftp>get cccc ddddd

       FTS_CMD_APPE:送信(追加)します。ftp>append eeee fffff

      単/複伝送

       FTS_MLT_AUTO:単一ファイル伝送と複数ファイル伝送を自動で切り替えます。デフォルトです。伝送の種類がFTS_CMD_SENDまたはFTS_CMD_APPEのときは,FTS_MLT_AUTOを指定してください。

       FTS_MLT_MULTIPLE:複数ファイル伝送をします。

       FTS_MLT_SINGLE:単一ファイル伝送をします。

       FTS_MLT_AUTOでは,次のように伝送が自動切り替えされます。

       送信の場合:ローカルファイル名に,*または?が使用されているか判定し,*または?が使用されていれば複数ファイル伝送に,使用されていなければ単一ファイル伝送に切り替わります。

       受信の場合:リモートファイル名に,*または?が使用されているか判定し,*または?が使用されていれば複数ファイル伝送に,使用されていなければ単一ファイル伝送に切り替わります。

      (例)

       単一ファイルの受信

       cmd = FTS_CMD_RECV | FTS_MLT_SINGLE;

    • quote:実行したいFTPコマンドを指定します。

      CWD,SITEなどのコマンドをセミコロン(';')で区切った文字列(文字列の最後は'\0')

      指定できるコマンドは,データコネクションを確立しないコマンドに限られます。また,FTPサーバ側でコマンドが実行可能かどうかは,FTPサーバに依存します。

    • localname:ローカルファイル名を指定します。

      (例)

       ftp>put aaaa bbbb

       ftp>get cccc dddd

    • remotename:リモートファイル名を指定します。

      (例)

       ftp>put aaaa bbbb

       ftp>get cccc dddd

    • end_program:伝送正常終了時に起動するプログラム名をフルパスで指定します。

    • abend_program:伝送異常終了時に起動するプログラム名をフルパスで指定します。

    • comment:任意の文字列を指定できます。

    • fsize:伝送後のファイルサイズ確認の有無を指定します。

      FTS_FSIZE_TRUE:サイズ確認をします。

      FTS_FSIZE_FALSE:サイズ確認をしません。

    • ftps:FTPS使用の有無を指定します。

      FTS_FTPS_TRUE:FTPSを使用します。

      FTS_FTPS_FALSE:FTPSを使用しません。

    • scertval:サーバ証明書の有効期限確認の有無を指定します。

      FTS_SCVAL_TRUE:有効期限確認をします。

      FTS_SCVAL_FALSE:有効期限確認をしません。

    • cacertpath:CA証明書ファイルのパス名をフルパスで指定します。

    • crlpath:CRLファイルのパス名をフルパスで指定します。

    • reserve:予約領域です。「\0」で初期化してください。

    注意事項

    char型の変数値の最後は,「\0」にしてください。

伝送終了情報の取得

fts_ftp_syn_request_ex(),fts_ftp_asyn_request_ex()で登録した伝送要求に対する終了情報を取得できます。

typedef struct _FTS_FTP_API_RETDATA_EX {
  /* 常時のデータ */
  int trans_status;          /* 伝送終了状態 成功(TRANS_SUCCESS) */
                             /* 伝送終了情報 失敗(TRANS_FAILURE) */
  char cardname[20+1];       /* カード名称 */
  unsigned long trno;        /* 伝送番号 */
  unsigned long trcno;       /* 接続番号 */
 
  /* 伝送成功時のデータ */
#ifdef FTS_API_64BIT
  unsigned __int64 trans_size; /* 伝送データサイズ */
  unsigned __int64 trans_size_comp; /* 圧縮後伝送データサイズ */
#else
  unsigned long trans_size;  /* 伝送データサイズ */
  unsigned long trans_size_comp; /* 圧縮後伝送データサイズ */
#endif
 
  /* 伝送失敗時のデータ */
  int ab_kind;               /* システムコールエラー(FTS_ERR_SYSTEM) */
                             /* 論理エラー(FTS_ERR_LOGIC) */
                             /* プロトコルエラー(FTS_ERR_PROTOCOL) */
                             /* SSL通信エラー(FTS_ERR_SSL) */
  char ab_place[8];          /* エラー発生場所 */
  char ab_func[32];          /* エラー発生モジュール名称 */
  char ab_system[32];        /* システムコール名称 */
  int ab_syskind;            /* システムコール種別 */
                             /* Win32 API(FTS_SYSKIND_WIN32) */
                             /* C runtime(FTS_SYSKIND_CRUNTIME) */
                             /* WinSock API(FTS_SYSKIND_WINSOCK) */
  unsigned long ab_errno;    /* エラー番号 */
  char ab_promes[256];       /* プロトコルメッセージ(エラー) */
 
#ifndef FTS_API_64BIT
  /* 4ギガバイトを超えた伝送成功時のデータ */
  DWORD trans_size_Low;      /* 伝送データサイズ(下位32ビットの値)*/
  LONG trans_size_High;      /* 伝送データサイズ(上位32ビットの値)*/
  DWORD trans_size_comp_Low;
                          /* 圧縮後伝送データサイズ(上位32ビットの値)*/
  LONG trans_size_comp_High;
                          /* 圧縮後伝送データサイズ(下位32ビットの値)*/
#endif
 
  int ab_sslerno;            /* SSL通信エラー番号 */
  char reserve[1664];     /* 予約領域 */
} FTS_FTP_API_RETDATA_EX;

コンパイルとリンク

ライブラリ使用時の注意事項