1#include "betalk.h"
2#include "beserved_rpc.h"
3
4
5// btStartPrintJob()
6//
7int btStartPrintJob(bt_rpcinfo *info, char *printerName, char *user, char *password, char *jobName, char **jobId)
8{
9	bt_inPacket *inPacket;
10	bt_outPacket *outPacket;
11	bt_rpccall *call;
12	int error;
13
14	error = EHOSTUNREACH;
15
16	outPacket = btRPCPutHeader(BT_CMD_PRINTJOB_NEW, 4, strlen(printerName) + strlen(jobName) + strlen(user) + BT_AUTH_TOKEN_LENGTH);
17	btRPCPutArg(outPacket, B_STRING_TYPE, printerName, strlen(printerName));
18	btRPCPutArg(outPacket, B_STRING_TYPE, user, strlen(user));
19	btRPCPutArg(outPacket, B_STRING_TYPE, password, BT_AUTH_TOKEN_LENGTH);
20	btRPCPutArg(outPacket, B_STRING_TYPE, jobName, strlen(jobName));
21	call = btRPCInvoke(info, outPacket, false);
22
23	if (call)
24	{
25		inPacket = call->inPacket;
26		if (inPacket)
27		{
28			error = btRPCGetInt32(inPacket);
29			if (error == B_OK)
30				*jobId = btRPCGetNewString(inPacket);
31		}
32
33		btRPCRemoveCall(call);
34	}
35
36	return error;
37}
38
39// btPrintJobData()
40//
41int btPrintJobData(bt_rpcinfo *info, char *printerName, char *jobId, char *data, int dataLen)
42{
43	bt_inPacket *inPacket;
44	bt_outPacket *outPacket;
45	bt_rpccall *call;
46	int error;
47
48	error = EHOSTUNREACH;
49
50	outPacket = btRPCPutHeader(BT_CMD_PRINTJOB_DATA, 4, strlen(printerName) + strlen(jobId) + dataLen + 4);
51	btRPCPutArg(outPacket, B_STRING_TYPE, printerName, strlen(printerName));
52	btRPCPutArg(outPacket, B_STRING_TYPE, jobId, strlen(jobId));
53	btRPCPutArg(outPacket, B_STRING_TYPE, data, dataLen);
54	btRPCPutArg(outPacket, B_INT32_TYPE, &dataLen, sizeof(dataLen));
55	call = btRPCInvoke(info, outPacket, false);
56
57	if (call)
58	{
59		inPacket = call->inPacket;
60		if (inPacket)
61			error = btRPCGetInt32(inPacket);
62
63		btRPCRemoveCall(call);
64	}
65
66	return error;
67}
68
69// btCommitPrintJob()
70//
71int btCommitPrintJob(bt_rpcinfo *info, char *printerName, char *jobId)
72{
73	bt_inPacket *inPacket;
74	bt_outPacket *outPacket;
75	bt_rpccall *call;
76	int error;
77
78	error = EHOSTUNREACH;
79
80	outPacket = btRPCPutHeader(BT_CMD_PRINTJOB_COMMIT, 2, strlen(printerName) + strlen(jobId));
81	btRPCPutArg(outPacket, B_STRING_TYPE, printerName, strlen(printerName));
82	btRPCPutArg(outPacket, B_STRING_TYPE, jobId, strlen(jobId));
83	call = btRPCInvoke(info, outPacket, false);
84
85	if (call)
86	{
87		inPacket = call->inPacket;
88		if (inPacket)
89			error = btRPCGetInt32(inPacket);
90
91		btRPCRemoveCall(call);
92	}
93
94	return error;
95}
96