[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How do cvs client server communicate
From: |
Jim Hyslop |
Subject: |
Re: How do cvs client server communicate |
Date: |
Wed, 22 Mar 2006 12:11:39 -0500 |
User-agent: |
Mozilla Thunderbird 1.0.6 (Windows/20050716) |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
PJP wrote:
> Jim Hyslop wrote:
>
>>None. The server takes its input from stdin, and sends its output to
>>stdout and stderr. I believe linking the TCP/IP socket to std[*] is
>>handled by (x)inetd (I'm not a UNIX expert, so don't quote me on that :=)
>
>
> Hey thanks !,
> I think I should better state my problem, I'm tring to add a new commad
> to cvs. This command is supposed to read input from stdin on client
> side and send it over to cvs server. I've already reached the first
> half. But now where should I receive that data on server side, and do
> further processing ?
First thing you need to do (if you haven't already) is to study the
client-server protocol in doc/cvsclient.texi.
Next, examine how an existing command, such as 'cvs commit' works.
You'll notice that all CVS command handler functions expect *everything*
to be passed in via argc and argv.
On the server side, all you have to do is parse argc and argv. On the
client side, you have to write your function so that it passes
everything to the server as arguments. This is accomplished by using the
functions send_to_server, send_arg, option_with_arg, and so on.
So, you need to write your function so that it expects the text to be
one of the arguments passed via the command-line. For example, if on the
client side the user types:
cvs yourcommand[enter]
blah blah blah[ctrl-D]
then you need to process it as if the user typed:
cvs yourcommand -t "blah blah blah"
(this also makes it more flexible for the users - they can now actually
type 'cvs yourcommand -t "blah blah blah"' and it will work).
Inside your command handler function, add an #ifdef block which tests to
see if it's on the client side:
#ifdef CLIENT_SUPPORT
if ( current_parsed_root->isremote )
{
start_server(); /* establish a link to the server */
[retrieve user input into a buffer (Watch for overflow!) and
send the buffer to the server]
option_with_arg("-t", buffer);
set_to_server("yourcommand\012", 1);
[clean up and return]
}
#endif
Then simply parse argc and argv, looking for your -t parameter with its
associated text.
As I said, examine how existing commands work, and you should be able to
fill in any gaps I've left.
- --
Jim Hyslop
Dreampossible: Better software. Simply. http://www.dreampossible.ca
Consulting * Mentoring * Training in
C/C++ * OOD * SW Development & Practices * Version Management
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (MingW32)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFEIYVLLdDyDwyJw+MRAveCAKCcF3kRnuiaoHDZjrsHfOPdGde0jACfa9wr
jxnTitQG7QUK3PiU8C94YrY=
=+2a9
-----END PGP SIGNATURE-----