示例#1
0
static gpg_error_t
cmd_message (assuan_context_t ctx, char *line)
{
  int rc;
  gnupg_fd_t sysfd;
  int fd;
  ctrl_t ctrl = assuan_get_pointer (ctx);

  rc = assuan_command_parse_fd (ctx, line, &sysfd);
  if (rc)
    return rc;

#ifdef HAVE_W32CE_SYSTEM
  sysfd = _assuan_w32ce_finish_pipe ((int)sysfd, 0);
  if (sysfd == INVALID_HANDLE_VALUE)
    return set_error (gpg_err_code_from_syserror (),
		      "rvid conversion failed");
#endif

  fd = translate_sys2libc_fd (sysfd, 0);
  if (fd == -1)
    return set_error (GPG_ERR_ASS_NO_INPUT, NULL);
  ctrl->server_local->message_fd = fd;
  return 0;
}
示例#2
0
/* Format is OUTPUT FD=<n> */
static gpg_error_t
std_handler_output (assuan_context_t ctx, char *line)
{
  gpg_error_t rc;
  assuan_fd_t fd, oldfd;

  rc = assuan_command_parse_fd (ctx, line, &fd);
  if (rc)
    return PROCESS_DONE (ctx, rc);

#ifdef HAVE_W32CE_SYSTEM
  oldfd = fd;
  fd = _assuan_w32ce_finish_pipe ((int)fd, 1);
  if (fd == INVALID_HANDLE_VALUE)
    return PROCESS_DONE (ctx, set_error (ctx, gpg_err_code_from_syserror (),
					 "rvid conversion failed"));
  TRACE2 (ctx, ASSUAN_LOG_SYSIO, "std_handler_output", ctx,
	  "turned RVID 0x%x into handle 0x%x", oldfd, fd);
#endif

  if (ctx->output_notify_fnc)
    {
      oldfd = ctx->output_fd;
      ctx->output_fd = fd;
      rc = ctx->output_notify_fnc (ctx, line);
      if (rc)
        ctx->output_fd = oldfd;
    }
  else if (!rc)
    ctx->output_fd = fd;
  return PROCESS_DONE (ctx, rc);
}
示例#3
0
文件: server.c 项目: Distrotech/gnupg
/*  MESSAGE FD[=<n>]

   Set the file descriptor to read a message which is used with
   detached signatures.  */
static gpg_error_t
cmd_message (assuan_context_t ctx, char *line)
{
  int rc;
  gnupg_fd_t fd;
  ctrl_t ctrl = assuan_get_pointer (ctx);

  rc = assuan_command_parse_fd (ctx, line, &fd);
  if (rc)
    return rc;
  if (fd == GNUPG_INVALID_FD)
    return gpg_error (GPG_ERR_ASS_NO_INPUT);
  ctrl->server_local->message_fd = fd;
  return 0;
}