CRPC is a remote procedure call system with the C language support

Key features and advantages:

  Project news:

  • CRPC extends standard C language with new modificators.
    With CRPC you should only use these new modificators to declare client and server side functions.

  • CRPC wrapper-compiler supports all base data types, and all the data types defined in the source code
    (i.e. all the data types). CRPC allows sending data addressed by pointer of any type.

  • System uses an automatic function distinguishing method based on 32-bit checksum.

  • CRPC allows easily parallelize functions using POSIX Threads.
    Two types of parallelism is available - network and non-network.

  • CRPC supports encryption based on SSL.

  • System uses only C standard library (if threading is not used) and can be compiled at any
    operating system that supports C and BSD sockets.

    Full documentation:

  • README (plain text)
    This file can also be found inside the package
  • Downloads:

    The project is being actively developed now,
    and the latest version of sources is available via this link.

2009.09.20
crpc-0.7.6-090920
Released

2009.08.25
crpc-0.7.6-090825
Released

2009.04.20
crpc-0.7.6-090420
Released

2009.02.07
crpc-0.7.6-090207
Released

2008.09.28
crpc-0.7.5 Released

2008.02.06
crpc-0.7.4 Released

2007.05.31
crpc-0.7.3 Released

Quick reference

Examples and sample programs

To simplify development of the network applications CRPC extends C syntax with the new reserved words:

__remote new storage class qualifier to declare remote functions (remote execution)

__local new storage class qualifier to declare functions which are to be called as remote (local execution)

__attribute__
((__format_ptr))
new function attribute for associating pointers with the appropriate size parameters

__in new modificator, which tells the system to send data addressed by the marked parameter only to the server and not to receive it back (used only with function parameters)

__out new modificator, which tells the system not to send data addressed by the marked parameter to the server but only to receive it back (used only with function parameters)

__threaded new modificator for marking functions, which are to be executed in several threads, using POSIX Threads library. Could be combined with __local modificator


To create client and server part of the application, you should declare remote functions with appropriate qualifiers:

 Client side:  Server side:
int __remote func(int, double *)
__attribute__((__format_ptr(1[0])));

void main(int argc, char **argv) {
  int n;
  double *da;
  ...
  func(n,da);
  ...
}
__local int func(int n,double *data);

int func(int n, double *data) {
  int res;
  ...
  return res;
}

Threaded function declaration will be look like this:

__local __threaded int mul(int n);

int mul(int n) {
  int _res;
  ...
  res+=_res;
}

CRPC is only need C standard library, BSD sockets support and POSIX Threads library.
More information can be found in the README file.

Tests and examples are available inside the package:
  • base programs to test CRPC functionality

  • example Apache module,
    used as CRPC client

  • distributed version of FreeBSD
    ps program

Some applications

Very simple yet functional SQLite database client and server built with CRPC can be downloaded via thi link this link.

Contacts:

I will be pleased with any suggestions and bug reports.

To contact, please mail to:  ababanin@gmail.com