2 ################################################################################
4 # File: cqc.pm: Clearquest Client Module
5 # Description: Perl Module interface to cqd (ClearQuest Daemon). This is used
6 # by cqc and cgi script to talk to cqd.
7 # Author: Andrew@DeFaria.com
8 # Created: Fri May 31 15:34:50 2002
12 # (c) Copyright 2002, Salira Optical Network Systems, all rights reserved.
14 ################################################################################
21 @EXPORT = qw (Connect, GetBugRecord, Disconnect %fields $command $verbose);
26 my $default_server = "sons-clearcase";
30 my $cqcversion = "1.0";
32 # Reopen STDOUT. This is because cqperl screws around with STDOUT in some
34 open STDOUT, ">-" or die "Unable to reopen STDOUT\n";
35 # Set unbuffered output for the same reason (cqperl)
40 print "@_\n" if defined ($verbose);
48 if (!defined ($host)) {
52 $cqserver = ConnectToServer ($host);
55 verbose "Connected to $host";
56 SendServerAck ($cqserver);
65 if ($cqc::command eq "shutdown") {
66 $msg = "Disconnected from server - shutdown server";
68 $cqc::command = "quit";
69 $msg = "Disconnected from server";
71 SendServerCmd ($cqserver, $cqc::command);
72 GetServerAck ($cqserver);
86 verbose "Not connected to server yet!\n";
87 verbose "Attempting connection to $default_server...\n";
88 $result = Connect ($default_server);
89 return -1 if !defined ($result);
92 SendServerCmd ($cqserver, $bugid);
93 GetServerAck ($cqserver);
94 $result = GetServerResponse ($cqserver, %fields);
95 SendServerAck ($cqserver);
104 sub ConnectToServer {
107 # create a tcp connection to the specified host and port
108 return IO::Socket::INET->new(Proto => "tcp",
116 print $server "ACK\n";
123 while (defined ($srvresp = <$server>)) {
125 if ($srvresp eq "ACK") {
128 print "Received $srvresp from server - expected ACK\n";
132 sub GetServerResponse {
140 while (defined ($srvresp = <$server>)) {
142 last if $srvresp eq "ACK";
143 if ($srvresp =~ m/Bug ID.*was not found/) {
146 $srvresp =~ /(^\w+):\s+(.*)/s;
152 } # GetServerResponse
158 print $server "$command\n";