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