File:  [cvs.NetBSD.org] / pkgsrc / mail / nopop3d / files / nopop3d.c
Revision 1.2: download - view: text, annotated - select for diffs
Mon Nov 23 18:17:22 2020 UTC (4 years, 5 months ago) by schmonz
Branches: MAIN
CVS tags: pkgsrc-2025Q1-base, pkgsrc-2025Q1, pkgsrc-2024Q4-base, pkgsrc-2024Q4, pkgsrc-2024Q3-base, pkgsrc-2024Q3, pkgsrc-2024Q2-base, pkgsrc-2024Q2, pkgsrc-2024Q1-base, pkgsrc-2024Q1, pkgsrc-2023Q4-base, pkgsrc-2023Q4, pkgsrc-2023Q3-base, pkgsrc-2023Q3, pkgsrc-2023Q2-base, pkgsrc-2023Q2, pkgsrc-2023Q1-base, pkgsrc-2023Q1, pkgsrc-2022Q4-base, pkgsrc-2022Q4, pkgsrc-2022Q3-base, pkgsrc-2022Q3, pkgsrc-2022Q2-base, pkgsrc-2022Q2, pkgsrc-2022Q1-base, pkgsrc-2022Q1, pkgsrc-2021Q4-base, pkgsrc-2021Q4, pkgsrc-2021Q3-base, pkgsrc-2021Q3, pkgsrc-2021Q2-base, pkgsrc-2021Q2, pkgsrc-2021Q1-base, pkgsrc-2021Q1, pkgsrc-2020Q4-base, pkgsrc-2020Q4, HEAD
Fix RCS Id.

/* $NetBSD: nopop3d.c,v 1.2 2020/11/23 18:17:22 schmonz Exp $ */

#include <stdlib.h>
#include "commands.h"
#include "sig.h"
#include "substdio.h"
#include "readwrite.h"
#include "timeoutread.h"
#include "timeoutwrite.h"

void die() { exit(0); }

int saferead(fd,buf,len) int fd; char *buf; int len;
{
  int r;
  r = timeoutread(1200,fd,buf,len);
  if (r <= 0) die();
  return r;
}

int safewrite(fd,buf,len) int fd; char *buf; int len;
{
  int r;
  r = timeoutwrite(1200,fd,buf,len);
  if (r <= 0) die();
  return r;
}

char ssoutbuf[1024];
substdio ssout = SUBSTDIO_FDBUF(safewrite,1,ssoutbuf,sizeof ssoutbuf);

char ssinbuf[128];
substdio ssin = SUBSTDIO_FDBUF(saferead,0,ssinbuf,sizeof ssinbuf);

void err_unimpl(arg) char *arg; {
  substdio_putsflush(&ssout,"-ERR unimplemented\r\n");
}

void okay(arg) char *arg;
{
  substdio_putsflush(&ssout,"+OK \r\n");
}

void pop3_list(arg) char *arg;
{
  substdio_putsflush(&ssout,"+OK \r\n.\r\n");
}

void pop3_stat(arg) char *arg;
{
  substdio_putsflush(&ssout,"+OK 0 0\r\n");
}

void pop3_quit(arg) char *arg;
{
  okay();
  die();
}

struct commands pop3commands[] = {
  { "quit", pop3_quit, 0 }
, { "stat", pop3_stat, 0 }
, { "list", pop3_list, 0 }
, { "noop", okay, 0 }
, { 0, err_unimpl, 0 }
} ;

void main(argc,argv)
int argc;
char **argv;
{
  sig_alarmcatch(die);
  sig_pipeignore();
 
  okay(0);
  commands(&ssin,pop3commands);
  die();
}

CVSweb <webmaster@jp.NetBSD.org>