GDCM 2.2.1

- Main Page
- Related Pages
- Namespaces
- Classes
- Files
- Examples

- File List
- File Members

gdcmULConnection.h
Go to the documentation of this file.
1 /*=========================================================================
2 *
3 * Copyright Insight Software Consortium
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0.txt
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *=========================================================================*/
18 #ifndef GDCMULCONNECTION_H
19 #define GDCMULCONNECTION_H
20
21 #include "gdcmNetworkStateID.h"
22 #include "gdcmARTIMTimer.h"
23 #include "gdcmULConnectionInfo.h"
24 #include "gdcmPresentationContextRQ.h"
25 #include "gdcmDataElement.h"
26 #include "gdcmPresentationContextAC.h"
27 #include "gdcmPresentationContext.h"
28
29 #include "gdcmScanner.h" // FIXME
30
31 class iosockinet;
32 class echo;
33 namespace gdcm{
34 namespace network{
35
59 class ULConnection
60 {
61 ULConnectionInfo mInfo;
62 //this is a dirty dirty hack
63 //but to establish an outgoing connection (scu), we need the echo service
64 //to establish incoming, we just need a port and localhost, so an iosockinet works while an
65 //echo would fail (probably because one already exists)
66 echo* mEcho;
67 iosockinet* mSocket;//of the three protocols offered by socket++-- echo, smtp, and ftp--
68 //echo most closely matches what the DICOM standard describes as a network connection
69 ARTIMTimer mTimer;
70
71 ULConnection(ULConnection& inConnection); //no copy construction allowed
72
73 EStateID mCurrentState;
74
75 std::vector<PresentationContextRQ> mPresentationContexts;
76 //this is our list of presentation contexts of what we can send
77 uint32_t mMaxPDUSize;
78
79 std::vector<PresentationContextAC> mAcceptedPresentationContexts;//these come back from the server
80 //and tell us what can be sent over this connection
81
82 public:
83
84 ULConnection(const ULConnectionInfo& inUserInformation);
85 //destructors are virtual to prevent memory leaks by inherited classes
86 virtual ~ULConnection();
87
88 EStateID GetState() const;
89 void SetState(const EStateID& inState);//must be able to update state...
90
91 //echo* GetProtocol();
92 std::iostream* GetProtocol();
93 void StopProtocol();
94
95 ARTIMTimer& GetTimer();
96
97 const ULConnectionInfo &GetConnectionInfo() const;
98
99 //when the connection is first associated, the connection is told
100 //the max packet/PDU size and the way in which to present data
101 //(presentation contexts, etc). Store that here.
102 void SetMaxPDUSize(uint32_t inSize);
103 uint32_t GetMaxPDUSize() const;
104
105 const PresentationContextAC *GetPresentationContextACByID(uint8_t id) const;
106 const PresentationContextRQ *GetPresentationContextRQByID(uint8_t id) const;
107
109 uint8_t GetPresentationContextIDFromPresentationContext(PresentationContextRQ const & pc) const;
110
111 std::vector<PresentationContextRQ> const & GetPresentationContexts() const;
112 void SetPresentationContexts(const std::vector<PresentationContextRQ>& inContexts);
113
114 void SetPresentationContexts(const std::vector<PresentationContext>& inContexts);
115
116 //given a particular data element, presumably the SOP class,
117 //find the presentation context for that SOP
118 //NOT YET IMPLEMENTED
119 PresentationContextRQ FindContext(const DataElement& de) const;
120
121 std::vector<PresentationContextAC> const & GetAcceptedPresentationContexts() const;
122 std::vector<PresentationContextAC> & GetAcceptedPresentationContexts();
123 void AddAcceptedPresentationContext(const PresentationContextAC& inPC);
124
126 bool InitializeConnection();
127
129 bool InitializeIncomingConnection();
130 };
131 }
132 }
133
134 #endif // ULCONNECTION_H