ReactOS  0.4.15-dev-1150-g593bcce
svc_vc.c File Reference
#include <wintirpc.h>
#include <reentrant.h>
#include <sys/types.h>
#include <assert.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <rpc/rpc.h>
#include "rpc_com.h"
#include <getpeereid.h>
Include dependency graph for svc_vc.c:

Go to the source code of this file.

Classes

struct  cf_rendezvous
 
struct  cf_conn
 

Functions

static SVCXPRTmakefd_xprt (SOCKET, u_int, u_int)
 
static bool_t rendezvous_request (SVCXPRT *, struct rpc_msg *)
 
static enum xprt_stat rendezvous_stat (SVCXPRT *)
 
static void svc_vc_destroy (SVCXPRT *)
 
static void __svc_vc_dodestroy (SVCXPRT *)
 
static int read_vc (void *, void *, int)
 
static int write_vc (void *, void *, int)
 
static enum xprt_stat svc_vc_stat (SVCXPRT *)
 
static bool_t svc_vc_recv (SVCXPRT *, struct rpc_msg *)
 
static bool_t svc_vc_getargs (SVCXPRT *, xdrproc_t, void *)
 
static bool_t svc_vc_freeargs (SVCXPRT *, xdrproc_t, void *)
 
static bool_t svc_vc_reply (SVCXPRT *, struct rpc_msg *)
 
static void svc_vc_rendezvous_ops (SVCXPRT *)
 
static void svc_vc_ops (SVCXPRT *)
 
static bool_t svc_vc_control (SVCXPRT *xprt, const u_int rq, void *in)
 
static bool_t svc_vc_rendezvous_control (SVCXPRT *xprt, const u_int rq, void *in)
 
void __xprt_set_raddr (SVCXPRT *xprt, const struct sockaddr_storage *ss)
 
SVCXPRTsvc_vc_create (int fd, u_int sendsize, u_int recvsize)
 
SVCXPRTsvc_fd_create (SOCKET fd, u_int sendsize, u_int recvsize)
 
static int write_vc (void *xprtp, char *buf, int len)
 
int __rpc_get_local_uid (SVCXPRT *transp, uid_t *uid)
 
bool_t __svc_clean_idle (fd_set *fds, int timeout, bool_t cleanblock)
 

Variables

rwlock_t svc_fd_lock
 

Function Documentation

◆ __rpc_get_local_uid()

int __rpc_get_local_uid ( SVCXPRT transp,
uid_t uid 
)

Definition at line 783 of file svc_vc.c.

783  {
784  SOCKET sock;
785  int ret;
786  gid_t egid;
787  uid_t euid;
788  struct sockaddr *sa;
789 
790  sock = transp->xp_fd;
791  sa = (struct sockaddr *)transp->xp_rtaddr.buf;
792  if (sa->sa_family == AF_UNIX) {
793  ret = getpeereid(sock, &euid, &egid);
794  if (ret == 0)
795  *uid = euid;
796  return (ret);
797  } else
798  return (-1);
799 }
static SOCKET sock
Definition: syslog.c:45
long uid_t
Definition: various.h:8
UINT gid_t
Definition: types.h:89
int getpeereid(int s, uid_t *euid, gid_t *egid)
Definition: getpeereid.c:46
SOCKET xp_fd
Definition: svc.h:91
if(!(yy_init))
Definition: macro.lex.yy.c:714
int ret
struct netbuf xp_rtaddr
Definition: svc.h:120
Definition: tcpcore.h:1455
#define AF_UNIX
Definition: winsock.h:345
UINT_PTR SOCKET
Definition: winsock.h:47
static struct sockaddr_in sa
Definition: adnsresfilter.c:69

◆ __svc_clean_idle()

bool_t __svc_clean_idle ( fd_set fds,
int  timeout,
bool_t  cleanblock 
)

Definition at line 820 of file svc_vc.c.

821 {
822  int i, ncleaned;
823  SVCXPRT *xprt, *least_active;
824  struct timeval tv, tdiff, tmax;
825  struct cf_conn *cd;
826 
827  gettimeofday(&tv, NULL);
828  tmax.tv_sec = tmax.tv_usec = 0;
829  least_active = NULL;
831  for (i = ncleaned = 0; i <= svc_maxfd; i++) {
832  if (FD_ISSET(i, fds)) {
833  xprt = __svc_xports[i];
834  if (xprt == NULL || xprt->xp_ops == NULL ||
835  xprt->xp_ops->xp_recv != svc_vc_recv)
836  continue;
837  cd = (struct cf_conn *)xprt->xp_p1;
838  if (!cleanblock && !cd->nonblock)
839  continue;
840  if (timeout == 0) {
841  timersub(&tv, &cd->last_recv_time, &tdiff);
842  if (timercmp(&tdiff, &tmax, >)) {
843  tmax = tdiff;
844  least_active = xprt;
845  }
846  continue;
847  }
848  if (tv.tv_sec - cd->last_recv_time.tv_sec > timeout) {
850  __svc_vc_dodestroy(xprt);
851  ncleaned++;
852  }
853  }
854  }
855  if (timeout == 0 && least_active != NULL) {
856  __xprt_unregister_unlocked(least_active);
857  __svc_vc_dodestroy(least_active);
858  ncleaned++;
859  }
861  return ncleaned > 0 ? TRUE : FALSE;
862 }
#define rwlock_wrlock(l)
Definition: reentrant.h:140
SVCXPRT ** __svc_xports
Definition: rpc_com.h:96
#define TRUE
Definition: types.h:120
static struct cd_image cd
Definition: cdmake.c:182
static bool_t svc_vc_recv(SVCXPRT *, struct rpc_msg *)
Definition: svc_vc.c:647
Definition: dhcpd.h:245
void __xprt_unregister_unlocked(SVCXPRT *)
Definition: svc.c:134
#define timersub(tvp1, tvp2)
Definition: time.h:116
#define gettimeofday(tv, tz)
Definition: adns_win32.h:159
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define FALSE
Definition: types.h:117
#define FD_ISSET(fd, set)
Definition: winsock.h:100
#define rwlock_unlock(l)
Definition: reentrant.h:142
smooth NULL
Definition: ftsmooth.c:416
const struct __rpc_svcxprt::xp_ops * xp_ops
rwlock_t svc_fd_lock
Definition: mt_misc.c:22
if(!(yy_init))
Definition: macro.lex.yy.c:714
Definition: svc_vc.c:94
void * xp_p1
Definition: svc.h:123
int svc_maxfd
static void __svc_vc_dodestroy(SVCXPRT *)
Definition: svc_vc.c:407
#define timercmp(tvp, uvp, cmp)
Definition: rdesktop.h:184

Referenced by rendezvous_request(), and svc_run().

◆ __svc_vc_dodestroy()

static void __svc_vc_dodestroy ( SVCXPRT xprt)
static

Definition at line 407 of file svc_vc.c.

409 {
410  struct cf_conn *cd;
411  struct cf_rendezvous *r;
412 
413  cd = (struct cf_conn *)xprt->xp_p1;
414 
415  if (xprt->xp_fd != RPC_ANYFD)
416  (void)closesocket(xprt->xp_fd);
417  if (xprt->xp_port != 0) {
418  /* a rendezvouser socket */
419  r = (struct cf_rendezvous *)xprt->xp_p1;
420  mem_free(r, sizeof (struct cf_rendezvous));
421  xprt->xp_port = 0;
422  } else {
423  /* an actual connection socket */
424  XDR_DESTROY(&(cd->xdrs));
425  mem_free(cd, sizeof(struct cf_conn));
426  }
427  if (xprt->xp_rtaddr.buf)
428  mem_free(xprt->xp_rtaddr.buf, xprt->xp_rtaddr.maxlen);
429  if (xprt->xp_ltaddr.buf)
430  mem_free(xprt->xp_ltaddr.buf, xprt->xp_ltaddr.maxlen);
431  if (xprt->xp_tp)
432  free(xprt->xp_tp);
433  if (xprt->xp_netid)
434  free(xprt->xp_netid);
435  mem_free(xprt, sizeof(SVCXPRT));
436 }
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static struct cd_image cd
Definition: cdmake.c:182
#define free
Definition: debug_ros.c:5
#define closesocket
Definition: precomp.h:57
u_short xp_port
Definition: svc.h:92
char * xp_tp
Definition: svc.h:117
struct netbuf xp_ltaddr
Definition: svc.h:119
SOCKET xp_fd
Definition: svc.h:91
if(!(yy_init))
Definition: macro.lex.yy.c:714
Definition: svc_vc.c:94
void * xp_p1
Definition: svc.h:123
struct netbuf xp_rtaddr
Definition: svc.h:120
#define RPC_ANYFD
Definition: svc.h:328
#define mem_free(ptr, bsize)
Definition: types.h:124
char * xp_netid
Definition: svc.h:118
#define XDR_DESTROY(xdrs)
Definition: xdr.h:214

Referenced by __svc_clean_idle(), and svc_vc_destroy().

◆ __xprt_set_raddr()

void __xprt_set_raddr ( SVCXPRT xprt,
const struct sockaddr_storage ss 
)

Definition at line 111 of file svc_vc.c.

112 {
113  switch (ss->ss_family) {
114  case AF_INET6:
115  memcpy(&xprt->xp_raddr, ss, sizeof(struct sockaddr_in6));
116  xprt->xp_addrlen = sizeof (struct sockaddr_in6);
117  break;
118  case AF_INET:
119  memcpy(&xprt->xp_raddr, ss, sizeof(struct sockaddr_in));
120  xprt->xp_addrlen = sizeof (struct sockaddr_in);
121  break;
122  default:
123  xprt->xp_raddr.sin6_family = AF_UNSPEC;
124  xprt->xp_addrlen = sizeof (struct sockaddr);
125  break;
126  }
127 }
#define AF_INET6
Definition: winsock.h:369
#define AF_UNSPEC
Definition: winsock.h:344
struct sockaddr_in6 xp_raddr
Definition: svc.h:110
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
int xp_addrlen
Definition: svc.h:109
#define AF_INET
Definition: tcpip.h:117
#define ss
Definition: i386-dis.c:432

Referenced by rendezvous_request(), svc_dg_recv(), and svc_fd_create().

◆ makefd_xprt()

static SVCXPRT * makefd_xprt ( SOCKET  fd,
u_int  sendsize,
u_int  recvsize 
)
static

Definition at line 252 of file svc_vc.c.

256 {
257  SVCXPRT *xprt;
258  struct cf_conn *cd;
259  const char *netid;
260  struct __rpc_sockinfo si;
261 
262  assert(fd != SOCKET_ERROR);
263 
264  if (fd >= FD_SETSIZE) {
265  // XXX warnx("svc_vc: makefd_xprt: fd too high\n");
266  xprt = NULL;
267  goto done;
268  }
269 
270  xprt = mem_alloc(sizeof(SVCXPRT));
271  if (xprt == NULL) {
272  // XXX warnx("svc_vc: makefd_xprt: out of memory");
273  goto done;
274  }
275  memset(xprt, 0, sizeof *xprt);
276  cd = mem_alloc(sizeof(struct cf_conn));
277  if (cd == NULL) {
278  // XXX warnx("svc_tcp: makefd_xprt: out of memory");
279  mem_free(xprt, sizeof(SVCXPRT));
280  xprt = NULL;
281  goto done;
282  }
283  cd->strm_stat = XPRT_IDLE;
284  xdrrec_create(&(cd->xdrs), sendsize, recvsize,
285  xprt, read_vc, write_vc);
286  xprt->xp_p1 = cd;
287  xprt->xp_verf.oa_base = cd->verf_body;
288  svc_vc_ops(xprt); /* truely deals with calls */
289  xprt->xp_port = 0; /* this is a connection, not a rendezvouser */
290  xprt->xp_fd = fd;
291  if (__rpc_fd2sockinfo(fd, &si) && __rpc_sockinfo2netid(&si, &netid))
292  xprt->xp_netid = strdup(netid);
293 
294  xprt_register(xprt);
295 done:
296  return (xprt);
297 }
#define SOCKET_ERROR
Definition: winsock.h:333
static struct cd_image cd
Definition: cdmake.c:182
#define assert(x)
Definition: debug.h:53
static int fd
Definition: io.c:51
u_short xp_port
Definition: svc.h:92
#define mem_alloc(bsize)
Definition: types.h:123
int __rpc_fd2sockinfo(SOCKET fd, struct __rpc_sockinfo *sip)
Definition: rpc_generic.c:481
_Check_return_ _CRTIMP char *__cdecl strdup(_In_opt_z_ const char *_Src)
smooth NULL
Definition: ftsmooth.c:416
#define FD_SETSIZE
Definition: winsock.h:50
SOCKET xp_fd
Definition: svc.h:91
Definition: svc.h:84
void xprt_register(SVCXPRT *xprt)
Definition: svc.c:97
Definition: svc_vc.c:94
void * xp_p1
Definition: svc.h:123
static int read_vc(void *, void *, int)
Definition: svc_vc.c:480
int __rpc_sockinfo2netid(struct __rpc_sockinfo *, const char **)
Definition: rpc_generic.c:580
struct opaque_auth xp_verf
Definition: svc.h:121
static void svc_vc_ops(SVCXPRT *)
Definition: svc_vc.c:728
#define mem_free(ptr, bsize)
Definition: types.h:124
static int write_vc(void *, void *, int)
#define memset(x, y, z)
Definition: compat.h:39
char * xp_netid
Definition: svc.h:118
void xdrrec_create(XDR *xdrs, u_int sendsize, u_int recvsize, int *void *, int *readit, int *writeit)
Definition: xdr_rec.c:179

Referenced by rendezvous_request(), and svc_fd_create().

◆ read_vc()

static int read_vc ( void xprtp,
void buf,
int  len 
)
static

Definition at line 480 of file svc_vc.c.

484 {
485  SVCXPRT *xprt;
486  SOCKET sock;
487  int milliseconds = 35 * 1000;
488  struct pollfd pollfd;
489  struct cf_conn *cfp;
490 
491  xprt = (SVCXPRT *)xprtp;
492  assert(xprt != NULL);
493 
494  sock = xprt->xp_fd;
495 
496  cfp = (struct cf_conn *)xprt->xp_p1;
497 
498  if (cfp->nonblock) {
499 #ifdef _WIN32
500  len = recv(sock, buf, (size_t)len, 0);
501 #else
502  len = read(sock, buf, (size_t)len);
503 #endif
504  if (len == SOCKET_ERROR) {
505  if (WSAGetLastError() == EAGAIN)
506  len = 0;
507  else
508  goto fatal_err;
509  }
510  if (len != 0)
512  return len;
513  }
514 
515  do {
516 #ifndef __REACTOS__
517  pollfd.fd = sock;
518  pollfd.events = POLLIN;
519  pollfd.revents = 0;
520  switch (poll(&pollfd, 1, milliseconds)) {
521 #else
522  /* ReactOS: use select instead of poll */
523  fd_set infd;
524  struct timeval timeout;
525 
526  FD_ZERO(&infd);
527  FD_SET(sock, &infd);
528 
529  timeout.tv_sec = 0;
530  timeout.tv_usec = milliseconds * 1000;
531 
532  switch (select(0, &infd, NULL, NULL, &timeout)) {
533 #endif
534  case -1:
535  if (errno == EINTR)
536  continue;
537  /*FALLTHROUGH*/
538  case 0:
539  goto fatal_err;
540 
541  default:
542  break;
543  }
544 #ifndef __REACTOS__
545  } while ((pollfd.revents & POLLIN) == 0);
546 #else
547  } while (TRUE);
548 #endif
549 
550 #ifdef _WIN32
551  if ((len = recv(sock, buf, (size_t)len, 0)) > 0) {
552 #else
553  if ((len = read(sock, buf, (size_t)len)) > 0) {
554 #endif
556  return (len);
557  }
558 
559 fatal_err:
560  ((struct cf_conn *)(xprt->xp_p1))->strm_stat = XPRT_DIED;
561  return (-1);
562 }
Definition: winsock.h:66
#define SOCKET_ERROR
Definition: winsock.h:333
static SOCKET sock
Definition: syslog.c:45
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define TRUE
Definition: types.h:120
#define EINTR
Definition: acclib.h:80
#define assert(x)
Definition: debug.h:53
Definition: dhcpd.h:245
int errno
#define FD_ZERO(set)
Definition: winsock.h:96
#define FD_SET(fd, set)
Definition: winsock.h:89
Definition: svc.h:82
bool_t nonblock
Definition: svc_vc.c:102
#define gettimeofday(tv, tz)
Definition: adns_win32.h:159
short events
Definition: linux.h:1869
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
Definition: select.c:41
smooth NULL
Definition: ftsmooth.c:416
Definition: arc.h:35
enum xprt_stat strm_stat
Definition: svc_vc.c:95
INT WSAAPI WSAGetLastError(VOID)
Definition: dllmain.c:112
SOCKET xp_fd
Definition: svc.h:91
if(!(yy_init))
Definition: macro.lex.yy.c:714
int poll(struct pollfd *ufds, int nfds, int timeout)
Definition: adnstest.c:68
#define POLLIN
Definition: linux.h:1853
Definition: linux.h:1867
Definition: svc_vc.c:94
GLenum GLsizei len
Definition: glext.h:6722
void * xp_p1
Definition: svc.h:123
int fd
Definition: linux.h:1868
struct timeval last_recv_time
Definition: svc_vc.c:103
short revents
Definition: linux.h:1870
Definition: tcpcore.h:1455
UINT_PTR SOCKET
Definition: winsock.h:47
INT WSAAPI recv(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags)
Definition: recv.c:23
_CRTIMP int __cdecl read(_In_ int _FileHandle, _Out_writes_bytes_(_MaxCharCount) void *_DstBuf, _In_ unsigned int _MaxCharCount)

Referenced by makefd_xprt().

◆ rendezvous_request()

static bool_t rendezvous_request ( SVCXPRT xprt,
struct rpc_msg msg 
)
static

Definition at line 301 of file svc_vc.c.

304 {
305  SOCKET sock;
306 #ifndef _WIN32
307  int flags;
308 #endif
309  struct cf_rendezvous *r;
310  struct cf_conn *cd;
311  struct sockaddr_storage addr;
312  socklen_t len;
313  struct __rpc_sockinfo si;
314  SVCXPRT *newxprt;
315  fd_set cleanfds;
316 
317  assert(xprt != NULL);
318  assert(msg != NULL);
319 
320  r = (struct cf_rendezvous *)xprt->xp_p1;
321 again:
322  len = sizeof addr;
323  if ((sock = accept(xprt->xp_fd, (struct sockaddr *)(void *)&addr,
324  &len)) == SOCKET_ERROR) {
325  if (errno == EINTR)
326  goto again;
327 #ifndef __REACTOS__ // CVE-2018-14621
328  /*
329  * Clean out the most idle file descriptor when we're
330  * running out.
331  */
332  if (errno == EMFILE || errno == ENFILE) {
333  cleanfds = svc_fdset;
334  __svc_clean_idle(&cleanfds, 0, FALSE);
335  goto again;
336  }
337 #endif
338  return (FALSE);
339  }
340  /*
341  * make a new transporter (re-uses xprt)
342  */
343 
344  newxprt = makefd_xprt(sock, r->sendsize, r->recvsize);
345 #ifdef __REACTOS__ // CVE-2018-14622
346  if (!newxprt)
347  return (FALSE);
348 #endif
349 
350  if (!__rpc_set_netbuf(&newxprt->xp_rtaddr, &addr, len))
351  return (FALSE);
352 
353  __xprt_set_raddr(newxprt, &addr);
354 
355  if (__rpc_fd2sockinfo(sock, &si) && si.si_proto == IPPROTO_TCP) {
356  len = 1;
357  /* XXX fvdl - is this useful? */
358  setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&len, sizeof (len));
359  }
360 
361  cd = (struct cf_conn *)newxprt->xp_p1;
362 
363  cd->recvsize = r->recvsize;
364  cd->sendsize = r->sendsize;
365  cd->maxrec = r->maxrec;
366 
367 #ifndef _WIN32
368  if (cd->maxrec != 0) {
369  flags = fcntl(sock, F_GETFL, 0);
370  if (flags == -1)
371  return (FALSE);
372  if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1)
373  return (FALSE);
374  if (cd->recvsize > cd->maxrec)
375  cd->recvsize = cd->maxrec;
376  cd->nonblock = TRUE;
377  __xdrrec_setnonblock(&cd->xdrs, cd->maxrec);
378  } else
379  cd->nonblock = FALSE;
380 #endif /* _WIN32 */
381 
382  gettimeofday(&cd->last_recv_time, NULL);
383 
384  return (FALSE); /* there is never an rpc msg to be processed */
385 }
Definition: winsock.h:66
#define SOCKET_ERROR
Definition: winsock.h:333
bool_t __xdrrec_setnonblock(XDR *, int)
Definition: xdr_rec.c:663
static SOCKET sock
Definition: syslog.c:45
#define TRUE
Definition: types.h:120
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static struct cd_image cd
Definition: cdmake.c:182
#define O_NONBLOCK
Definition: port.h:158
fd_set svc_fdset
#define EINTR
Definition: acclib.h:80
#define assert(x)
Definition: debug.h:53
int errno
void __xprt_set_raddr(SVCXPRT *xprt, const struct sockaddr_storage *ss)
Definition: svc_vc.c:111
#define TCP_NODELAY
Definition: tcpdef.h:117
static SVCXPRT * makefd_xprt(SOCKET, u_int, u_int)
Definition: svc_vc.c:252
#define gettimeofday(tv, tz)
Definition: adns_win32.h:159
int __rpc_fd2sockinfo(SOCKET fd, struct __rpc_sockinfo *sip)
Definition: rpc_generic.c:481
#define FALSE
Definition: types.h:117
INT WSAAPI setsockopt(IN SOCKET s, IN INT level, IN INT optname, IN CONST CHAR FAR *optval, IN INT optlen)
Definition: sockctrl.c:421
smooth NULL
Definition: ftsmooth.c:416
SOCKET xp_fd
Definition: svc.h:91
if(!(yy_init))
Definition: macro.lex.yy.c:714
int socklen_t
Definition: tcp.c:35
Definition: svc_vc.c:94
struct netbuf * __rpc_set_netbuf(struct netbuf *, const void *, size_t)
Definition: rpc_generic.c:951
GLbitfield flags
Definition: glext.h:7161
GLenum const GLvoid * addr
Definition: glext.h:9621
GLenum GLsizei len
Definition: glext.h:6722
void * xp_p1
Definition: svc.h:123
#define ENFILE
Definition: errno.h:29
SOCKET WSAAPI accept(IN SOCKET s, OUT LPSOCKADDR addr, OUT INT FAR *addrlen)
Definition: socklife.c:23
Definition: arc.h:42
Definition: tcpcore.h:1455
#define msg(x)
Definition: auth_time.c:54
UINT_PTR SOCKET
Definition: winsock.h:47
bool_t __svc_clean_idle(fd_set *fds, int timeout, bool_t cleanblock)
Definition: svc_vc.c:820

Referenced by svc_vc_rendezvous_ops().

◆ rendezvous_stat()

static enum xprt_stat rendezvous_stat ( SVCXPRT xprt)
static

Definition at line 389 of file svc_vc.c.

391 {
392 
393  return (XPRT_IDLE);
394 }
Definition: svc.h:84

Referenced by svc_vc_rendezvous_ops().

◆ svc_fd_create()

SVCXPRT* svc_fd_create ( SOCKET  fd,
u_int  sendsize,
u_int  recvsize 
)

Definition at line 204 of file svc_vc.c.

208 {
209  struct sockaddr_storage ss;
210  socklen_t slen;
211  SVCXPRT *ret;
212 
213  assert(fd != -1);
214 
215  ret = makefd_xprt(fd, sendsize, recvsize);
216  if (ret == NULL)
217  return NULL;
218 
219  slen = sizeof (struct sockaddr_storage);
220  if (getsockname(fd, (struct sockaddr *)(void *)&ss, &slen) == SOCKET_ERROR) {
221  // XXX warnx("svc_fd_create: could not retrieve local addr");
222  goto freedata;
223  }
224  if (!__rpc_set_netbuf(&ret->xp_ltaddr, &ss, sizeof(ss))) {
225  // XXX warnx("svc_fd_create: no mem for local addr");
226  goto freedata;
227  }
228 
229  slen = sizeof (struct sockaddr_storage);
230  if (getpeername(fd, (struct sockaddr *)(void *)&ss, &slen) == SOCKET_ERROR) {
231  // XXX warnx("svc_fd_create: could not retrieve remote addr");
232  goto freedata;
233  }
234  if (!__rpc_set_netbuf(&ret->xp_rtaddr, &ss, sizeof(ss))) {
235  // XXX warnx("svc_fd_create: no mem for local addr");
236  goto freedata;
237  }
238 
239  /* Set xp_raddr for compatibility */
241 
242  return ret;
243 
244 freedata:
245  if (ret->xp_ltaddr.buf != NULL)
246  mem_free(ret->xp_ltaddr.buf, rep->xp_ltaddr.maxlen);
247 
248  return NULL;
249 }
#define SOCKET_ERROR
Definition: winsock.h:333
#define assert(x)
Definition: debug.h:53
static int fd
Definition: io.c:51
void __xprt_set_raddr(SVCXPRT *xprt, const struct sockaddr_storage *ss)
Definition: svc_vc.c:111
static SVCXPRT * makefd_xprt(SOCKET, u_int, u_int)
Definition: svc_vc.c:252
smooth NULL
Definition: ftsmooth.c:416
INT WSAAPI getpeername(IN SOCKET s, OUT LPSOCKADDR name, IN OUT INT FAR *namelen)
Definition: sockctrl.c:167
int socklen_t
Definition: tcp.c:35
struct netbuf * __rpc_set_netbuf(struct netbuf *, const void *, size_t)
Definition: rpc_generic.c:951
int ret
#define mem_free(ptr, bsize)
Definition: types.h:124
#define ss
Definition: i386-dis.c:432
INT WSAAPI getsockname(IN SOCKET s, OUT LPSOCKADDR name, IN OUT INT FAR *namelen)
Definition: sockctrl.c:213

Referenced by svc_tli_create().

◆ svc_vc_control()

static bool_t svc_vc_control ( SVCXPRT xprt,
const u_int  rq,
void in 
)
static

Definition at line 440 of file svc_vc.c.

444 {
445  return (FALSE);
446 }
#define FALSE
Definition: types.h:117

Referenced by svc_vc_ops().

◆ svc_vc_create()

SVCXPRT* svc_vc_create ( int  fd,
u_int  sendsize,
u_int  recvsize 
)

Definition at line 146 of file svc_vc.c.

150 {
151  SVCXPRT *xprt;
152  struct cf_rendezvous *r = NULL;
153  struct __rpc_sockinfo si;
154  struct sockaddr_storage sslocal;
155  socklen_t slen;
156 
157  r = mem_alloc(sizeof(*r));
158  if (r == NULL) {
159  // XXX warnx("svc_vc_create: out of memory");
160  goto cleanup_svc_vc_create;
161  }
162  if (!__rpc_fd2sockinfo(fd, &si))
163  return NULL;
164  r->sendsize = __rpc_get_t_size(si.si_af, si.si_proto, (int)sendsize);
165  r->recvsize = __rpc_get_t_size(si.si_af, si.si_proto, (int)recvsize);
166  r->maxrec = __svc_maxrec;
167  xprt = mem_alloc(sizeof(SVCXPRT));
168  if (xprt == NULL) {
169  // XXX warnx("svc_vc_create: out of memory");
170  goto cleanup_svc_vc_create;
171  }
172  xprt->xp_tp = NULL;
173  xprt->xp_p1 = r;
174  xprt->xp_p2 = NULL;
175  xprt->xp_p3 = NULL;
176  xprt->xp_verf = _null_auth;
177  svc_vc_rendezvous_ops(xprt);
178  xprt->xp_port = (u_short)-1; /* It is the rendezvouser */
179  xprt->xp_fd = fd;
180 
181  slen = sizeof (struct sockaddr_storage);
182  if (getsockname(fd, (struct sockaddr *)(void *)&sslocal, &slen) == SOCKET_ERROR) {
183  // XXX warnx("svc_vc_create: could not retrieve local addr");
184  goto cleanup_svc_vc_create;
185  }
186 
187  if (!__rpc_set_netbuf(&xprt->xp_ltaddr, &sslocal, sizeof(sslocal))) {
188  // XXX warnx("svc_vc_create: no mem for local addr");
189  goto cleanup_svc_vc_create;
190  }
191  xprt_register(xprt);
192  return (xprt);
193 cleanup_svc_vc_create:
194  if (r != NULL)
195  mem_free(r, sizeof(*r));
196  return (NULL);
197 }
u_int __rpc_get_t_size(int af, int proto, int size)
Definition: rpc_generic.c:139
#define SOCKET_ERROR
Definition: winsock.h:333
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static int fd
Definition: io.c:51
u_short xp_port
Definition: svc.h:92
#define mem_alloc(bsize)
Definition: types.h:123
struct opaque_auth _null_auth
int __rpc_fd2sockinfo(SOCKET fd, struct __rpc_sockinfo *sip)
Definition: rpc_generic.c:481
char * xp_tp
Definition: svc.h:117
smooth NULL
Definition: ftsmooth.c:416
struct netbuf xp_ltaddr
Definition: svc.h:119
SOCKET xp_fd
Definition: svc.h:91
void xprt_register(SVCXPRT *xprt)
Definition: svc.c:97
int socklen_t
Definition: tcp.c:35
struct netbuf * __rpc_set_netbuf(struct netbuf *, const void *, size_t)
Definition: rpc_generic.c:951
unsigned short u_short
Definition: types.h:81
void * xp_p2
Definition: svc.h:124
void * xp_p1
Definition: svc.h:123
static void svc_vc_rendezvous_ops(SVCXPRT *)
Definition: svc_vc.c:753
struct opaque_auth xp_verf
Definition: svc.h:121
void * xp_p3
Definition: svc.h:125
#define mem_free(ptr, bsize)
Definition: types.h:124
int __svc_maxrec
Definition: rpc_com.h:97
INT WSAAPI getsockname(IN SOCKET s, OUT LPSOCKADDR name, IN OUT INT FAR *namelen)
Definition: sockctrl.c:213

Referenced by svc_tli_create().

◆ svc_vc_destroy()

static void svc_vc_destroy ( SVCXPRT xprt)
static

Definition at line 397 of file svc_vc.c.

399 {
400  assert(xprt != NULL);
401 
402  xprt_unregister(xprt);
403  __svc_vc_dodestroy(xprt);
404 }
#define assert(x)
Definition: debug.h:53
void xprt_unregister(SVCXPRT *xprt)
Definition: svc.c:128
smooth NULL
Definition: ftsmooth.c:416
static void __svc_vc_dodestroy(SVCXPRT *)
Definition: svc_vc.c:407

Referenced by svc_vc_ops(), and svc_vc_rendezvous_ops().

◆ svc_vc_freeargs()

static bool_t svc_vc_freeargs ( SVCXPRT xprt,
xdrproc_t  xdr_args,
void args_ptr 
)
static

Definition at line 689 of file svc_vc.c.

693 {
694  XDR *xdrs;
695 
696  assert(xprt != NULL);
697  /* args_ptr may be NULL */
698 
699  xdrs = &(((struct cf_conn *)(xprt->xp_p1))->xdrs);
700 
701  xdrs->x_op = XDR_FREE;
702  return ((*xdr_args)(xdrs, args_ptr));
703 }
XDR xdrs
Definition: svc_vc.c:97
#define assert(x)
Definition: debug.h:53
Definition: xdr.h:103
smooth NULL
Definition: ftsmooth.c:416
enum xdr_op x_op
Definition: xdr.h:104
Definition: svc_vc.c:94
void * xp_p1
Definition: svc.h:123
Definition: xdr.h:87

Referenced by svc_vc_ops().

◆ svc_vc_getargs()

static bool_t svc_vc_getargs ( SVCXPRT xprt,
xdrproc_t  xdr_args,
void args_ptr 
)
static

Definition at line 676 of file svc_vc.c.

680 {
681 
682  assert(xprt != NULL);
683  /* args_ptr may be NULL */
684  return ((*xdr_args)(&(((struct cf_conn *)(xprt->xp_p1))->xdrs),
685  args_ptr));
686 }
#define assert(x)
Definition: debug.h:53
smooth NULL
Definition: ftsmooth.c:416
Definition: svc_vc.c:94
void * xp_p1
Definition: svc.h:123

Referenced by svc_vc_ops().

◆ svc_vc_ops()

static void svc_vc_ops ( SVCXPRT xprt)
static

Definition at line 728 of file svc_vc.c.

730 {
731  static struct xp_ops ops;
732  static struct xp_ops2 ops2;
733  extern mutex_t ops_lock;
734 
735 /* VARIABLES PROTECTED BY ops_lock: ops, ops2 */
736 
738  if (ops.xp_recv == NULL) {
739  ops.xp_recv = svc_vc_recv;
740  ops.xp_stat = svc_vc_stat;
741  ops.xp_getargs = svc_vc_getargs;
742  ops.xp_reply = svc_vc_reply;
743  ops.xp_freeargs = svc_vc_freeargs;
744  ops.xp_destroy = svc_vc_destroy;
745  ops2.xp_control = svc_vc_control;
746  }
747  xprt->xp_ops = &ops;
748  xprt->xp_ops2 = &ops2;
750 }
mutex_t ops_lock
Definition: mt_misc.c:71
static bool_t svc_vc_getargs(SVCXPRT *, xdrproc_t, void *)
Definition: svc_vc.c:676
static bool_t svc_vc_recv(SVCXPRT *, struct rpc_msg *)
Definition: svc_vc.c:647
#define mutex_lock(m)
Definition: reentrant.h:128
#define mutex_unlock(m)
Definition: reentrant.h:129
static bool_t svc_vc_control(SVCXPRT *xprt, const u_int rq, void *in)
Definition: svc_vc.c:440
smooth NULL
Definition: ftsmooth.c:416
const struct __rpc_svcxprt::xp_ops * xp_ops
static bool_t svc_vc_freeargs(SVCXPRT *, xdrproc_t, void *)
Definition: svc_vc.c:689
static bool_t svc_vc_reply(SVCXPRT *, struct rpc_msg *)
Definition: svc_vc.c:706
static enum xprt_stat svc_vc_stat(SVCXPRT *)
Definition: svc_vc.c:630
static void svc_vc_destroy(SVCXPRT *)
Definition: svc_vc.c:397
Definition: module.h:446
const struct __rpc_svcxprt::xp_ops2 * xp_ops2

Referenced by makefd_xprt().

◆ svc_vc_recv()

static bool_t svc_vc_recv ( SVCXPRT xprt,
struct rpc_msg msg 
)
static

Definition at line 647 of file svc_vc.c.

650 {
651  struct cf_conn *cd;
652  XDR *xdrs;
653 
654  assert(xprt != NULL);
655  assert(msg != NULL);
656 
657  cd = (struct cf_conn *)(xprt->xp_p1);
658  xdrs = &(cd->xdrs);
659 
660  if (cd->nonblock) {
661  if (!__xdrrec_getrec(xdrs, &cd->strm_stat, TRUE))
662  return FALSE;
663  }
664 
665  xdrs->x_op = XDR_DECODE;
667  if (xdr_callmsg(xdrs, msg)) {
668  cd->x_id = msg->rm_xid;
669  return (TRUE);
670  }
671  cd->strm_stat = XPRT_DIED;
672  return (FALSE);
673 }
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
#define TRUE
Definition: types.h:120
XDR xdrs
Definition: svc_vc.c:97
static struct cd_image cd
Definition: cdmake.c:182
#define assert(x)
Definition: debug.h:53
Definition: xdr.h:103
Definition: svc.h:82
#define FALSE
Definition: types.h:117
smooth NULL
Definition: ftsmooth.c:416
bool_t xdr_callmsg(XDR *xdrs, struct rpc_msg *cmsg)
Definition: rpc_callmsg.c:50
enum xdr_op x_op
Definition: xdr.h:104
Definition: svc_vc.c:94
void * xp_p1
Definition: svc.h:123
#define msg(x)
Definition: auth_time.c:54
Definition: xdr.h:86
bool_t xdrrec_skiprecord(XDR *xdrs)
Definition: xdr_rec.c:496
bool_t __xdrrec_getrec(XDR *, enum xprt_stat *, bool_t)
Definition: xdr_rec.c:581

Referenced by __svc_clean_idle(), and svc_vc_ops().

◆ svc_vc_rendezvous_control()

static bool_t svc_vc_rendezvous_control ( SVCXPRT xprt,
const u_int  rq,
void in 
)
static

Definition at line 449 of file svc_vc.c.

453 {
454  struct cf_rendezvous *cfp;
455 
456  cfp = (struct cf_rendezvous *)xprt->xp_p1;
457  if (cfp == NULL)
458  return (FALSE);
459  switch (rq) {
460  case SVCGET_CONNMAXREC:
461  *(int *)in = cfp->maxrec;
462  break;
463  case SVCSET_CONNMAXREC:
464  cfp->maxrec = *(int *)in;
465  break;
466  default:
467  return (FALSE);
468  }
469  return (TRUE);
470 }
int maxrec
Definition: svc_vc.c:91
#define SVCGET_CONNMAXREC
Definition: svc.h:72
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
smooth NULL
Definition: ftsmooth.c:416
if(!(yy_init))
Definition: macro.lex.yy.c:714
void * xp_p1
Definition: svc.h:123
GLuint in
Definition: glext.h:9616
#define SVCSET_CONNMAXREC
Definition: svc.h:73

Referenced by svc_vc_rendezvous_ops().

◆ svc_vc_rendezvous_ops()

static void svc_vc_rendezvous_ops ( SVCXPRT xprt)
static

Definition at line 753 of file svc_vc.c.

755 {
756  static struct xp_ops ops;
757  static struct xp_ops2 ops2;
758  extern mutex_t ops_lock;
759 
761  if (ops.xp_recv == NULL) {
762  ops.xp_recv = rendezvous_request;
763  ops.xp_stat = rendezvous_stat;
764  ops.xp_getargs =
765  (bool_t (*)(SVCXPRT *, xdrproc_t, void *))abort;
766  ops.xp_reply =
767  (bool_t (*)(SVCXPRT *, struct rpc_msg *))abort;
768  ops.xp_freeargs =
769  (bool_t (*)(SVCXPRT *, xdrproc_t, void *))abort,
770  ops.xp_destroy = svc_vc_destroy;
771  ops2.xp_control = svc_vc_rendezvous_control;
772  }
773  xprt->xp_ops = &ops;
774  xprt->xp_ops2 = &ops2;
776 }
mutex_t ops_lock
Definition: mt_misc.c:71
static bool_t rendezvous_request(SVCXPRT *, struct rpc_msg *)
Definition: svc_vc.c:301
int32_t bool_t
Definition: types.h:101
static enum xprt_stat rendezvous_stat(SVCXPRT *)
Definition: svc_vc.c:389
#define mutex_lock(m)
Definition: reentrant.h:128
#define mutex_unlock(m)
Definition: reentrant.h:129
bool_t(* xdrproc_t)(XDR *,...)
Definition: xdr.h:144
smooth NULL
Definition: ftsmooth.c:416
const struct __rpc_svcxprt::xp_ops * xp_ops
#define abort()
Definition: i386-dis.c:35
static void svc_vc_destroy(SVCXPRT *)
Definition: svc_vc.c:397
Definition: module.h:446
static bool_t svc_vc_rendezvous_control(SVCXPRT *xprt, const u_int rq, void *in)
Definition: svc_vc.c:449
const struct __rpc_svcxprt::xp_ops2 * xp_ops2

Referenced by svc_vc_create().

◆ svc_vc_reply()

static bool_t svc_vc_reply ( SVCXPRT xprt,
struct rpc_msg msg 
)
static

Definition at line 706 of file svc_vc.c.

709 {
710  struct cf_conn *cd;
711  XDR *xdrs;
712  bool_t rstat;
713 
714  assert(xprt != NULL);
715  assert(msg != NULL);
716 
717  cd = (struct cf_conn *)(xprt->xp_p1);
718  xdrs = &(cd->xdrs);
719 
720  xdrs->x_op = XDR_ENCODE;
721  msg->rm_xid = cd->x_id;
722  rstat = xdr_replymsg(xdrs, msg);
724  return (rstat);
725 }
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
int32_t bool_t
Definition: types.h:101
#define TRUE
Definition: types.h:120
XDR xdrs
Definition: svc_vc.c:97
static struct cd_image cd
Definition: cdmake.c:182
bool_t xdrrec_endofrecord(XDR *xdrs, bool_t sendnow)
Definition: xdr_rec.c:555
#define assert(x)
Definition: debug.h:53
Definition: xdr.h:103
smooth NULL
Definition: ftsmooth.c:416
enum xdr_op x_op
Definition: xdr.h:104
Definition: svc_vc.c:94
Definition: xdr.h:85
void * xp_p1
Definition: svc.h:123
#define msg(x)
Definition: auth_time.c:54
bool_t xdr_replymsg(XDR *xdrs, struct rpc_msg *rmsg)
Definition: rpc_prot.c:188

Referenced by svc_vc_ops().

◆ svc_vc_stat()

static enum xprt_stat svc_vc_stat ( SVCXPRT xprt)
static

Definition at line 630 of file svc_vc.c.

632 {
633  struct cf_conn *cd;
634 
635  assert(xprt != NULL);
636 
637  cd = (struct cf_conn *)(xprt->xp_p1);
638 
639  if (cd->strm_stat == XPRT_DIED)
640  return (XPRT_DIED);
641  if (! xdrrec_eof(&(cd->xdrs)))
642  return (XPRT_MOREREQS);
643  return (XPRT_IDLE);
644 }
bool_t xdrrec_eof(XDR *xdrs)
Definition: xdr_rec.c:531
static struct cd_image cd
Definition: cdmake.c:182
#define assert(x)
Definition: debug.h:53
Definition: svc.h:82
smooth NULL
Definition: ftsmooth.c:416
Definition: svc.h:84
Definition: svc_vc.c:94
void * xp_p1
Definition: svc.h:123

Referenced by svc_vc_ops().

◆ write_vc() [1/2]

static int write_vc ( void ,
void ,
int   
)
static

Referenced by makefd_xprt(), and read_vc().

◆ write_vc() [2/2]

static int write_vc ( void xprtp,
char buf,
int  len 
)
static

Definition at line 572 of file svc_vc.c.

581 {
582  SVCXPRT *xprt;
583  int i, cnt;
584  struct cf_conn *cd;
585  struct timeval tv0, tv1;
586 #ifdef __REACTOS__
587  char *buf = ptr;
588 #endif
589 
590  xprt = (SVCXPRT *)xprtp;
591  assert(xprt != NULL);
592 
593  cd = (struct cf_conn *)xprt->xp_p1;
594 
595  if (cd->nonblock)
596  gettimeofday(&tv0, NULL);
597 
598  for (cnt = len; cnt > 0; cnt -= i, buf += i) {
599 #ifdef _WIN32
600  i = send(xprt->xp_fd, buf, (size_t)cnt, 0);
601 #else
602  i = write(xprt->xp_fd, buf, (size_t)cnt);
603 #endif
604  if (i == SOCKET_ERROR) {
605  if (WSAGetLastError() != EAGAIN || !cd->nonblock) {
606  cd->strm_stat = XPRT_DIED;
607  return (-1);
608  }
609  if (cd->nonblock && i != cnt) {
610  /*
611  * For non-blocking connections, do not
612  * take more than 2 seconds writing the
613  * data out.
614  *
615  * XXX 2 is an arbitrary amount.
616  */
617  gettimeofday(&tv1, NULL);
618  if (tv1.tv_sec - tv0.tv_sec >= 2) {
619  cd->strm_stat = XPRT_DIED;
620  return (-1);
621  }
622  }
623  }
624  }
625 
626  return (len);
627 }
#define SOCKET_ERROR
Definition: winsock.h:333
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
static struct cd_image cd
Definition: cdmake.c:182
#define assert(x)
Definition: debug.h:53
Definition: svc.h:82
#define write
Definition: acwin.h:97
#define gettimeofday(tv, tz)
Definition: adns_win32.h:159
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static PVOID ptr
Definition: dispmode.c:27
smooth NULL
Definition: ftsmooth.c:416
Definition: arc.h:35
INT WSAAPI WSAGetLastError(VOID)
Definition: dllmain.c:112
SOCKET xp_fd
Definition: svc.h:91
if(!(yy_init))
Definition: macro.lex.yy.c:714
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
Definition: send.c:23
Definition: svc_vc.c:94
GLenum GLsizei len
Definition: glext.h:6722
void * xp_p1
Definition: svc.h:123

Variable Documentation

◆ svc_fd_lock

rwlock_t svc_fd_lock

Definition at line 22 of file mt_misc.c.

Referenced by __svc_clean_idle(), svc_exit(), and svc_run().