jdk/src/solaris/classes/sun/nio/ch/SctpResultContainer.java
changeset 2542 d859108aea12
child 3072 a801b122142f
equal deleted inserted replaced
2418:15096652c4d4 2542:d859108aea12
       
     1 /*
       
     2  * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.  Sun designates this
       
     8  * particular file as subject to the "Classpath" exception as provided
       
     9  * by Sun in the LICENSE file that accompanied this code.
       
    10  *
       
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14  * version 2 for more details (a copy is included in the LICENSE file that
       
    15  * accompanied this code).
       
    16  *
       
    17  * You should have received a copy of the GNU General Public License version
       
    18  * 2 along with this work; if not, write to the Free Software Foundation,
       
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20  *
       
    21  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
       
    22  * CA 95054 USA or visit www.sun.com if you need additional information or
       
    23  * have any questions.
       
    24  */
       
    25 package sun.nio.ch;
       
    26 
       
    27 /**
       
    28  * Wraps the actual message or notification so that it can be
       
    29  * set and returned from the native receive implementation.
       
    30  */
       
    31 public class SctpResultContainer {
       
    32     /* static final ints so that they can be referenced from native */
       
    33     static final int NOTHING = 0;
       
    34     static final int MESSAGE = 1;
       
    35     static final int SEND_FAILED = 2;
       
    36     static final int ASSOCIATION_CHANGED = 3;
       
    37     static final int PEER_ADDRESS_CHANGED = 4;
       
    38     static final int SHUTDOWN = 5;
       
    39 
       
    40     private Object value;
       
    41     private int type;
       
    42 
       
    43     int type() {
       
    44         return type;
       
    45     }
       
    46 
       
    47     boolean hasSomething() {
       
    48         return type() != NOTHING;
       
    49     }
       
    50 
       
    51     boolean isNotification() {
       
    52         return type() != MESSAGE && type() != NOTHING ? true : false;
       
    53     }
       
    54 
       
    55     void clear() {
       
    56         type = NOTHING;
       
    57         value = null;
       
    58     }
       
    59 
       
    60     SctpNotification notification() {
       
    61         assert type() != MESSAGE && type() != NOTHING;
       
    62 
       
    63         return (SctpNotification) value;
       
    64     }
       
    65 
       
    66     SctpMessageInfoImpl getMessageInfo() {
       
    67         assert type() == MESSAGE;
       
    68 
       
    69         if (value instanceof SctpMessageInfoImpl)
       
    70             return (SctpMessageInfoImpl) value;
       
    71 
       
    72         return null;
       
    73     }
       
    74 
       
    75     SctpSendFailed getSendFailed() {
       
    76         assert type() == SEND_FAILED;
       
    77 
       
    78         if (value instanceof SctpSendFailed)
       
    79             return (SctpSendFailed) value;
       
    80 
       
    81         return null;
       
    82     }
       
    83 
       
    84     SctpAssocChange getAssociationChanged() {
       
    85         assert type() == ASSOCIATION_CHANGED;
       
    86 
       
    87         if (value instanceof SctpAssocChange)
       
    88             return (SctpAssocChange) value;
       
    89 
       
    90         return null;
       
    91     }
       
    92 
       
    93     SctpPeerAddrChange getPeerAddressChanged() {
       
    94         assert type() == PEER_ADDRESS_CHANGED;
       
    95 
       
    96         if (value instanceof SctpPeerAddrChange)
       
    97             return (SctpPeerAddrChange) value;
       
    98 
       
    99         return null;
       
   100     }
       
   101 
       
   102     SctpShutdown getShutdown() {
       
   103         assert type() == SHUTDOWN;
       
   104 
       
   105         if (value instanceof SctpShutdown)
       
   106             return (SctpShutdown) value;
       
   107 
       
   108         return null;
       
   109     }
       
   110 
       
   111     @Override
       
   112     public String toString() {
       
   113         StringBuilder sb = new StringBuilder();
       
   114         sb.append("Type: ");
       
   115         switch (type) {
       
   116             case NOTHING:              sb.append("NOTHING");             break;
       
   117             case MESSAGE:              sb.append("MESSAGE");             break;
       
   118             case SEND_FAILED:          sb.append("SEND FAILED");         break;
       
   119             case ASSOCIATION_CHANGED:  sb.append("ASSOCIATION CHANGE");  break;
       
   120             case PEER_ADDRESS_CHANGED: sb.append("PEER ADDRESS CHANGE"); break;
       
   121             case SHUTDOWN:             sb.append("SHUTDOWN");            break;
       
   122             default :                  sb.append("Unknown result type");
       
   123         }
       
   124        return sb.append(", Value: ").append(value.toString()).toString();
       
   125     }
       
   126 }