1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_ucbhelper.hxx"
26*b1cdbd2cSJim Jagielski #include "ucbhelper/handleinteractionrequest.hxx"
27*b1cdbd2cSJim Jagielski #include "com/sun/star/task/XInteractionAbort.hpp"
28*b1cdbd2cSJim Jagielski #include "com/sun/star/task/XInteractionHandler.hpp"
29*b1cdbd2cSJim Jagielski #include "com/sun/star/task/XInteractionRetry.hpp"
30*b1cdbd2cSJim Jagielski #include "com/sun/star/ucb/CommandFailedException.hpp"
31*b1cdbd2cSJim Jagielski #include "com/sun/star/ucb/XCommandEnvironment.hpp"
32*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/Reference.hxx"
33*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/RuntimeException.hpp"
34*b1cdbd2cSJim Jagielski #include "cppuhelper/exc_hlp.hxx"
35*b1cdbd2cSJim Jagielski #include "osl/diagnose.h"
36*b1cdbd2cSJim Jagielski #include "rtl/ustring.hxx"
37*b1cdbd2cSJim Jagielski #ifndef _UCBHELPER_INTERACTIONREQUEST_HXX
38*b1cdbd2cSJim Jagielski #include "ucbhelper/interactionrequest.hxx"
39*b1cdbd2cSJim Jagielski #endif
40*b1cdbd2cSJim Jagielski #include "ucbhelper/simpleauthenticationrequest.hxx"
41*b1cdbd2cSJim Jagielski #include "ucbhelper/simpleinteractionrequest.hxx"
42*b1cdbd2cSJim Jagielski #include "ucbhelper/simplecertificatevalidationrequest.hxx"
43*b1cdbd2cSJim Jagielski #ifndef INCLUDED_UTILITY
44*b1cdbd2cSJim Jagielski #include <utility>
45*b1cdbd2cSJim Jagielski #define INCLUDED_UTILITY
46*b1cdbd2cSJim Jagielski #endif
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski using namespace com::sun::star;
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski namespace {
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski void
handle(uno::Reference<task::XInteractionRequest> const & rRequest,uno::Reference<ucb::XCommandEnvironment> const & rEnvironment)53*b1cdbd2cSJim Jagielski handle(uno::Reference< task::XInteractionRequest > const & rRequest,
54*b1cdbd2cSJim Jagielski        uno::Reference< ucb::XCommandEnvironment > const & rEnvironment)
55*b1cdbd2cSJim Jagielski     SAL_THROW((uno::Exception))
56*b1cdbd2cSJim Jagielski {
57*b1cdbd2cSJim Jagielski     OSL_ENSURE(rRequest.is(), "specification violation");
58*b1cdbd2cSJim Jagielski     uno::Reference< task::XInteractionHandler > xHandler;
59*b1cdbd2cSJim Jagielski     if (rEnvironment.is())
60*b1cdbd2cSJim Jagielski         xHandler = rEnvironment->getInteractionHandler();
61*b1cdbd2cSJim Jagielski     if (!xHandler.is())
62*b1cdbd2cSJim Jagielski         cppu::throwException(rRequest->getRequest());
63*b1cdbd2cSJim Jagielski     xHandler->handle(rRequest.get());
64*b1cdbd2cSJim Jagielski }
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski }
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski namespace ucbhelper {
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski sal_Int32
handleInteractionRequest(rtl::Reference<ucbhelper::SimpleInteractionRequest> const & rRequest,uno::Reference<ucb::XCommandEnvironment> const & rEnvironment,bool bThrowOnAbort)71*b1cdbd2cSJim Jagielski handleInteractionRequest(
72*b1cdbd2cSJim Jagielski     rtl::Reference< ucbhelper::SimpleInteractionRequest > const & rRequest,
73*b1cdbd2cSJim Jagielski     uno::Reference< ucb::XCommandEnvironment > const & rEnvironment,
74*b1cdbd2cSJim Jagielski     bool bThrowOnAbort)
75*b1cdbd2cSJim Jagielski     SAL_THROW((uno::Exception))
76*b1cdbd2cSJim Jagielski {
77*b1cdbd2cSJim Jagielski     handle(rRequest.get(), rEnvironment);
78*b1cdbd2cSJim Jagielski     sal_Int32 nResponse = rRequest->getResponse();
79*b1cdbd2cSJim Jagielski     switch (nResponse)
80*b1cdbd2cSJim Jagielski     {
81*b1cdbd2cSJim Jagielski     case ucbhelper::CONTINUATION_UNKNOWN:
82*b1cdbd2cSJim Jagielski         cppu::throwException(rRequest->getRequest());
83*b1cdbd2cSJim Jagielski         break;
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski     case ucbhelper::CONTINUATION_ABORT:
86*b1cdbd2cSJim Jagielski         if (bThrowOnAbort)
87*b1cdbd2cSJim Jagielski             throw ucb::CommandFailedException(
88*b1cdbd2cSJim Jagielski                       rtl::OUString(), 0, rRequest->getRequest());
89*b1cdbd2cSJim Jagielski         break;
90*b1cdbd2cSJim Jagielski     }
91*b1cdbd2cSJim Jagielski     return nResponse;
92*b1cdbd2cSJim Jagielski }
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski std::pair< sal_Int32,
95*b1cdbd2cSJim Jagielski            rtl::Reference< ucbhelper::InteractionSupplyAuthentication > >
handleInteractionRequest(rtl::Reference<ucbhelper::SimpleAuthenticationRequest> const & rRequest,uno::Reference<ucb::XCommandEnvironment> const & rEnvironment,bool bThrowOnAbort)96*b1cdbd2cSJim Jagielski handleInteractionRequest(
97*b1cdbd2cSJim Jagielski     rtl::Reference< ucbhelper::SimpleAuthenticationRequest > const & rRequest,
98*b1cdbd2cSJim Jagielski     uno::Reference< ucb::XCommandEnvironment > const & rEnvironment,
99*b1cdbd2cSJim Jagielski     bool bThrowOnAbort)
100*b1cdbd2cSJim Jagielski     SAL_THROW((uno::Exception))
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski     handle(rRequest.get(), rEnvironment);
103*b1cdbd2cSJim Jagielski     rtl::Reference< ucbhelper::InteractionContinuation >
104*b1cdbd2cSJim Jagielski         xContinuation(rRequest->getSelection());
105*b1cdbd2cSJim Jagielski     if (uno::Reference< task::XInteractionAbort >(
106*b1cdbd2cSJim Jagielski                 xContinuation.get(), uno::UNO_QUERY).
107*b1cdbd2cSJim Jagielski             is())
108*b1cdbd2cSJim Jagielski         if (bThrowOnAbort)
109*b1cdbd2cSJim Jagielski             throw ucb::CommandFailedException(
110*b1cdbd2cSJim Jagielski                       rtl::OUString(), 0, rRequest->getRequest());
111*b1cdbd2cSJim Jagielski         else
112*b1cdbd2cSJim Jagielski             return std::make_pair(
113*b1cdbd2cSJim Jagielski                        ucbhelper::CONTINUATION_ABORT,
114*b1cdbd2cSJim Jagielski                        rtl::Reference<
115*b1cdbd2cSJim Jagielski                            ucbhelper::InteractionSupplyAuthentication >());
116*b1cdbd2cSJim Jagielski     else if (uno::Reference< task::XInteractionRetry >(
117*b1cdbd2cSJim Jagielski                      xContinuation.get(), uno::UNO_QUERY).
118*b1cdbd2cSJim Jagielski                  is())
119*b1cdbd2cSJim Jagielski         return std::make_pair(
120*b1cdbd2cSJim Jagielski                    ucbhelper::CONTINUATION_ABORT,
121*b1cdbd2cSJim Jagielski                    rtl::Reference<
122*b1cdbd2cSJim Jagielski                        ucbhelper::InteractionSupplyAuthentication >());
123*b1cdbd2cSJim Jagielski     else
124*b1cdbd2cSJim Jagielski         return std::make_pair(
125*b1cdbd2cSJim Jagielski                    ucbhelper::CONTINUATION_UNKNOWN,
126*b1cdbd2cSJim Jagielski                    rtl::Reference<
127*b1cdbd2cSJim Jagielski                        ucbhelper::InteractionSupplyAuthentication >(
128*b1cdbd2cSJim Jagielski                            rRequest->getAuthenticationSupplier()));
129*b1cdbd2cSJim Jagielski }
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski }
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski namespace ucbhelper {
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski sal_Int32
handleInteractionRequest(rtl::Reference<ucbhelper::SimpleCertificateValidationRequest> const & rRequest,uno::Reference<ucb::XCommandEnvironment> const & rEnvironment,bool bThrowOnAbort)136*b1cdbd2cSJim Jagielski handleInteractionRequest(
137*b1cdbd2cSJim Jagielski     rtl::Reference< ucbhelper::SimpleCertificateValidationRequest > const & rRequest,
138*b1cdbd2cSJim Jagielski     uno::Reference< ucb::XCommandEnvironment > const & rEnvironment,
139*b1cdbd2cSJim Jagielski     bool bThrowOnAbort)
140*b1cdbd2cSJim Jagielski     SAL_THROW((uno::Exception))
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski     handle(rRequest.get(), rEnvironment);
143*b1cdbd2cSJim Jagielski     sal_Int32 nResponse = rRequest->getResponse();
144*b1cdbd2cSJim Jagielski     switch (nResponse)
145*b1cdbd2cSJim Jagielski     {
146*b1cdbd2cSJim Jagielski     case ucbhelper::CONTINUATION_UNKNOWN:
147*b1cdbd2cSJim Jagielski         cppu::throwException(rRequest->getRequest());
148*b1cdbd2cSJim Jagielski         break;
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski     case ucbhelper::CONTINUATION_ABORT:
151*b1cdbd2cSJim Jagielski         if (bThrowOnAbort)
152*b1cdbd2cSJim Jagielski             throw ucb::CommandFailedException(
153*b1cdbd2cSJim Jagielski                       rtl::OUString(), 0, rRequest->getRequest());
154*b1cdbd2cSJim Jagielski         break;
155*b1cdbd2cSJim Jagielski     }
156*b1cdbd2cSJim Jagielski     return nResponse;
157*b1cdbd2cSJim Jagielski }
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski }
160*b1cdbd2cSJim Jagielski 
161