• Home
  • Services
    • Consultancy
    • Custom Software Solutions
    • Systems Adminsitration
    • Web Applications
    • Customers
  • SCM
    • Clearcase
      • Triggers
      • Evil Twin Finder
      • GUI DiffBL
      • View Ager
      • Open Source Builds
    • Clearquest
      • Clearquest Daemon
      • DB Conversions
    • CVS
      • Respository
  • Scripting
    • Perl
    • ECRDig
  • Sysadm
    • Environment
  • About
    • Services
    • Our People
    • Contact Us
 

ClearSCM Inc.

You are viewing an unstyled version of this page. Either your browser does not support Cascading Style Sheets (CSS) or CSS styling has been disabled.

Clearquest Daemon API (code)

Defines the API to the Clearquest Daemon.

1 #!/usr/bin/perl
2 ################################################################################
3 #
4 # File:         cqc.pm,v
5 # Revision:     1.1.1.1
6 # Description:  Perl Module interface to cqd (ClearQuest Daemon). This is used
7 #               by cqc and cgi script to talk to cqd.
8 # Author:       Andrew@DeFaria.com
9 # Created:      Fri May 31 15:34:50  2002
10 # Modified:     2007/05/17 07:45:48
11 # Language:     Perl
12 #
13 # (c) Copyright 2007, ClearSCM, Inc., all rights reserved.
14 #
15 ################################################################################
16 use IO::Socket;
17
18 package cqc;
19   require (Exporter);
20   @ISA = qw (Exporter);
21
22   @EXPORT = qw (
23     Connect
24     GetBugRecord
25     Disconnect
26     %fields
27     $command
28     $verbose
29   );
30
31   my $host;
32   my $port = 1500;
33   my $command;
34   my $default_server = "sons-clearcase";
35   my $verbose;
36
37   BEGIN {
38     my $cqcversion = "1.0";
39
40     # Reopen STDOUT. This is because cqperl screws around with STDOUT in some
41     # weird fashion
42     open STDOUT, ">-" or die "Unable to reopen STDOUT\n";
43     # Set unbuffered output for the same reason (cqperl)
44     $| = 1;
45   } # BEGIN
46
47   sub verbose {
48     print "@_\n" if defined ($verbose);
49   } # verbose
50
51   sub Connect {
52     my $host = shift;
53
54     my $result;
55
56     if (!defined ($host)) {
57       $host = "localhost";
58     } # if
59
60     $cqserver = ConnectToServer ($host);
61
62     if ($cqserver) {
63       verbose "Connected to $host";
64       SendServerAck ($cqserver);
65     } # if
66
67     return $cqserver;
68   } # Connect
69
70   sub Disconnect {
71     my $msg;
72     if ($cqserver) {
73       if ($cqc::command eq "shutdown") {
74         $msg = "Disconnected from server - shutdown server";
75       } else {
76         $cqc::command = "quit";
77         $msg          = "Disconnected from server";
78       } # if
79       SendServerCmd ($cqserver, $cqc::command);
80       GetServerAck  ($cqserver);
81       verbose "$msg";
82       close ($cqserver);
83       undef $cqserver;
84     } # if
85   } # Disconnect
86
87   sub GetBugRecord {
88     my $bugid  = shift;
89     %fields = @_;
90
91     my $result;
92
93     if (!$cqserver) { 
94       verbose "Not connected to server yet!\n";
95       verbose "Attempting connection to $default_server...\n";
96       $result = Connect ($default_server);
97       return -1 if !defined ($result);
98     } # if
99
100     SendServerCmd               ($cqserver, $bugid);
101     GetServerAck                ($cqserver);
102     $result = GetServerResponse ($cqserver, %fields);
103     SendServerAck               ($cqserver);
104
105     return $result;
106   } # GetBugRecord
107
108   END {
109     Disconnect;
110   } # END
111
112   sub ConnectToServer {
113     my $host = shift;
114
115     # create a tcp connection to the specified host and port
116     return IO::Socket::INET->new(Proto     => "tcp",
117                                  PeerAddr  => $host,
118                                  PeerPort  => $port);
119   } # ConnectToServer
120
121   sub SendServerAck {
122     my $server = shift;
123
124     print $server "ACK\n";
125   } # SendServerAck
126
127   sub GetServerAck {
128     my $server = shift;
129     my $srvresp;
130
131     while (defined ($srvresp = <$server>)) {
132       chomp $srvresp;
133       if ($srvresp eq "ACK") {
134         return;
135       } # if
136       print "Received $srvresp from server - expected ACK\n";
137     } # while
138   } # GetServerAck
139
140   sub GetServerResponse {
141     my $server = shift;
142     %fields    = @_;
143
144     %fields = ();
145     my $srvresp;
146     my $result = 0;
147
148     while (defined ($srvresp = <$server>)) {
149       chomp $srvresp;
150       last if $srvresp eq "ACK";
151       if ($srvresp =~ m/Bug ID.*was not found/) {
152         $result = 1;
153       } else {
154         $srvresp =~ /(^\w+):\s+(.*)/s;
155         $fields {$1} = $2;
156       } # if
157     } # while
158
159     return $result;
160   } # GetServerResponse
161
162   sub SendServerCmd {
163     my $server  = shift;
164     my $command = shift;
165
166     print $server "$command\n";
167   } # SendServerCmd
168
169 1;

Last modified: December 31 1969 @ 4:00 pm
Copyright © 2012, ClearSCM Inc. - All rights reserved