GSS-API のプログラミング

send_token()

send_token() はトークンまたはメッセージを送信します。


例 A–18 send_token()


/*
 * 関数: send_token
 *
 * 目的: トークンをファイル記述子に書き込む
 *
 * 引数:
 *
 *      s               (r) 開いたファイル記述子
 *      tok             (r) 書き込むトークン
 *
 * 戻り値: 成功した場合は 0、失敗した場合は -1
 *
 * 効果:
 *
 * send_token はまずトークンの長さ (ネットワーク上の長さ) を、次にトークンの
 * データをファイル記述子 s に書き込みます。成功した場合は 0 を戻し、
 * エラーが発生したり、すべてのデータを書き込むことができなかった場合は 
 * -1 を戻します。
 */
int send_token(s, tok)
     int s;
     gss_buffer_t tok;
{
     int len, ret;

     len = htonl((OM_uint32)tok->length);
     ret = write_all(s, (char *) &len, sizeof(int));
     if (ret < 0) {
          perror("sending token length");
          return -1;
     } else if (ret != 4) {
         if (display_file)
             fprintf(display_file,
                     "sending token length: %d of %d bytes written\n",
                     ret, 4);
          return -1;
     }

     ret = write_all(s, tok->value, (OM_uint32)tok->length);
     if (ret < 0) {
          perror("sending token data");
          return -1;
     } else if (ret != tok->length) {
         if (display_file)
             fprintf(display_file,
                     "sending token data: %d of %d bytes written\n",
                     ret, tok->length);
         return -1;
     }

     return 0;
}